ক্রেগের পুরো উত্তর ছাড়াও, আমি যুক্ত করতে চেয়েছিলাম যে আপনি উল্লেখ করেছেন বইয়ের কভারটি:
ওরাকল, ডিবি 2 এবং এসকিউএল সার্ভারকে কভার করে
সুতরাং আমি এটি বিশেষত পোস্টগ্রাইএসকিউএল-তে পরামর্শের একটি দুর্দান্ত উত্স বলে বিশ্বাস করব না। প্রতিটি আরডিবিএমএস আশ্চর্যজনকভাবে আলাদা হতে পারে!
আমি আপনার আসল প্রশ্নটি সম্পর্কে কিছুটা বিভ্রান্ত, তবে এখানে একটি উদাহরণ যা বইয়ের এই বিভাগটি 100% সঠিক নয়। আরও বিভ্রান্তি এড়াতে, এখানে পুরো প্রাসঙ্গিক অনুচ্ছেদটি আপনি এটি গুগল বুক অনুসন্ধানে দেখতে পারেন ।
ডাটাবেসটি ধরে নিয়েছে যে সূচিযুক্ত_ কলটি দরকারী হওয়ার জন্য খুব বড় পরিসীমাটিকে কভার করে না, তাই এই শর্ত থেকে ডাটাবেস কোনও সূচকে চালিত করবে না। বিরল ক্ষেত্রে, কোনও ননল মূল্য থাকা এত বিরল যে সমস্ত সম্ভাব্য ননাল মানগুলির চেয়ে একটি সূচক পরিসীমা স্ক্যান উপকারী। এই জাতীয় ক্ষেত্রে, আপনি যদি সমস্ত সম্ভাব্য মানের সীমার কোনও নিরাপদ নিম্ন বা উচ্চতর সীমা নির্ধারণ করতে পারেন তবে আপনি পজিটিভ_আইডি_কলাম> -1 বা তারিখ_কলাম> TO_DATE ('0001/01/01' এর মতো একটি শর্ত দিয়ে একটি রেঞ্জ স্ক্যান সক্ষম করতে পারেন ' , 'ওয়াইওয়াই / এমএম / ডিডি')।
পোস্টগ্র্যাগস আসলে (নীচের স্বীকৃত ক্ষেত্রে) IS NOT NULL
প্রস্তাবিতের মতো পরিসীমা স্ক্যান ক্লডজ যুক্ত না করে প্রশ্নগুলি সন্তুষ্ট করতে একটি সূচক ব্যবহার করতে পারে Positive_ID_Column > -1
। এই বিশেষ ক্ষেত্রে পোস্টগ্র্রেস কেন এই সূচিটি বেছে নিচ্ছে তার জন্য ক্রেগের প্রশ্নের মন্তব্যসমূহ এবং আংশিক সূচকগুলি ব্যবহার সম্পর্কে নোট দেখুন।
CREATE TABLE bar (a int);
INSERT INTO bar (a) SELECT NULL FROM generate_series(1,1000000);
INSERT INTO bar (a) VALUES (1);
CREATE INDEX bar_idx ON bar (a);
EXPLAIN ANALYZE SELECT * FROM bar WHERE a IS NOT NULL;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------
Index Only Scan using bar_idx on bar (cost=0.42..8.44 rows=1 width=4) (actual time=0.094..0.095 rows=1 loops=1)
Index Cond: (a IS NOT NULL)
Heap Fetches: 1
Total runtime: 0.126 ms
(4 rows)
এটি পোস্টগ্র্রেস 9.3, যাইহোক, তবে আমি বিশ্বাস করি ফলাফলগুলি 9.1-তে প্রায় সমান হবে, যদিও এটি "সূচক কেবলমাত্র স্ক্যান" ব্যবহার করবে না।
সম্পাদনা: আমি দেখতে পাচ্ছি যে আপনি আপনার মূল প্রশ্নটি স্পষ্ট করেছেন, এবং আপনি আপাতভাবে ভাবছেন যে পোস্টগ্র্রেস কেন সরল উদাহরণে সূচকটি ব্যবহার করছে না:
CREATE TABLE my_table(
a varchar NOT NULL
);
CREATE INDEX ix_my_table ON my_table(a);
SELECT a from my_table;
সম্ভবত টেবিলে আপনার কোনও সারি নেই। সুতরাং কিছু পরীক্ষার ডেটা যুক্ত করুন এবং ANALYZE my_table;
।