আমি নিম্নলিখিত উদাহরণ দিয়ে আমার ভুল বোঝাবুঝির ব্যাখ্যা করার চেষ্টা করব।
বুঝলাম না মৌলিক এর Bitmap Heap Scan Node
। কোয়েরিটি SELECT customerid, username FROM customers WHERE customerid < 1000 AND username <'user100';
এর পরিকল্পনাটি বিবেচনা করুন :
Bitmap Heap Scan on customers (cost=25.76..61.62 rows=10 width=13) (actual time=0.077..0.077 rows=2 loops=1)
Recheck Cond: (((username)::text < 'user100'::text) AND (customerid < 1000))
-> BitmapAnd (cost=25.76..25.76 rows=10 width=0) (actual time=0.073..0.073 rows=0 loops=1)
-> Bitmap Index Scan on ix_cust_username (cost=0.00..5.75 rows=200 width=0) (actual time=0.006..0.006 rows=2 loops=1)
Index Cond: ((username)::text < 'user100'::text)
-> Bitmap Index Scan on customers_pkey (cost=0.00..19.75 rows=1000 width=0) (actual time=0.065..0.065 rows=999 loops=1)
Index Cond: (customerid < 1000)
এই নোড সম্পর্কে আমার বোঝার :
যেমনটি এখানে ব্যাখ্যা করা হয়েছে , bitmap heap scan
পাঠ্যগুলি ক্রমানুসারে ক্রমগুলি টেবিলটিকে ব্লক করে, সুতরাং এটি এলোমেলো-টেবিল-অ্যাক্সেসের ওভারহেড উত্পাদন করে না যা ঠিক করার মতো ঘটে Index Scan
।
কাজ শেষ Index Scan
হয়ে যাওয়ার পরে , পোস্টগ্রিসকিউএল জেনে নেই কীভাবে সারিগুলি আনতে হয়, অযৌক্তিকতা এড়াতে heap blocks reads
(বা hits
কোনও গরম ক্যাশে থাকলে)। সুতরাং এটি জিনিসটা বের করে গঠন (উত্পন্ন Bitmap Index Scan
) নামক bitmap
যা আমার ক্ষেত্রে ইনডেক্স দুই বিটম্যাপ উৎপাদিত এবং সম্পাদন দ্বারা তৈরি করা হচ্ছে BITWISE AND
। যেহেতু বিটম্যাপটি তৈরি করা হয়েছে এখন অপ্রয়োজনীয়তা এড়াতে একটি সিক্যুয়াল ক্রমে টেবিলটি অনুকূলভাবে পড়তে পারে heap I/O-operations
।
এটি সেই জায়গা যেখানে অনেক প্রশ্ন আসে।
প্রশ্ন: আমাদের কেবল একটি বিটম্যাপ রয়েছে। পোস্টগ্র্রেএসকিউএল কীভাবে সারিগুলির শারীরিক ক্রম সম্পর্কে কিছু বিটম্যাপ করে জানে? বা বিটম্যাপ তৈরি করে যাতে এর কোনও উপাদান সহজেই কোনও পৃষ্ঠায় পয়েন্টারে ম্যাপ করা যায়? যদি তাই হয় তবে এটি সবকিছু ব্যাখ্যা করে তবে এটি কেবল আমার অনুমান।
সুতরাং, আমরা কি সহজভাবে বলতে পারি যে এটি bitmap heap scan -> bitmap index scan
একটি সিক্যুয়াল স্ক্যানের মতো তবে কেবল টেবিলের উপযুক্ত অংশের?
001001010101011010101
। বা এটি আসলে কোনও বিষয় নয় এবং আমাদের কেবলমাত্র এটি জানতে হবে এটি কেবলমাত্র দ্রুতগতিতে বিটম্যাপের মাধ্যমে একটি ব্লক খুঁজে পেতে পারে ...?