BTree
আমার সমস্যাটি এখানে বিটিরি সূচকটি বিশাল হবে যেহেতু এটি সদৃশ মানগুলি নকল মান সংরক্ষণ করবে (এটি খুব বেশি, যেহেতু এটি টেবিলটি শারীরিকভাবে সাজানো হয়েছে তা ধরে নিতে পারে না)। বিটি ট্রি যদি বিশাল হয় তবে আমি সূচি এবং টেবিলের অংশগুলি উভয়ই পড়তে পেরেছি যা সূচকটিও দেখায় ...
অগত্যা নয় - একটি বিট্রি সূচক যা 'আচ্ছাদন' রয়েছে তা দ্রুত পড়ার সময় হবে এবং যদি আপনি এটি চান তবে (অর্থাত্ যদি আপনি অতিরিক্ত সঞ্চয়স্থান বহন করতে পারেন) তবে এটি আপনার সেরা বাজি।
ব্রিন
আমার বোধগম্যতা হল আমি অকেজো পৃষ্ঠাগুলি পড়ার ব্যয়ে এখানে একটি ছোট সূচক রাখতে পারি। একটি ছোট pages_per_range
অর্থের সাহায্যে সূচকটি বৃহত্তর (যা ব্রিনের সাথে একটি সমস্যা কারণ পুরো ইনডেক্সটি পড়তে হবে) এর বড় pages_per_range
অর্থ হ'ল আমি প্রচুর অকেজো পৃষ্ঠাগুলি পড়ব।
আপনি যদি কভারিং বিটি ইনডেক্সের স্টোরেজ ওভারহেড বহন করতে না পারেন তবে ব্রিন আপনার জন্য আদর্শ, কারণ আপনার কাছে ইতিমধ্যে ক্লাস্টারিং রয়েছে ( ব্রিনের দরকারী হওয়ার পক্ষে এটি গুরুত্বপূর্ণ )। ব্রিন সূচকগুলি খুব ছোট , তাই আপনি যদি একটি উপযুক্ত মান চয়ন করেন তবে সমস্ত পৃষ্ঠাগুলি স্মৃতিতে থাকবে pages_per_range
।
পেজ_পার_আরঞ্জের ভাল মান খুঁজে পাওয়ার জন্য কি কোনও যাদু সূত্র রয়েছে যা এই ট্রেডগুলি বিবেচনায় নেয়?
কোনও যাদু ফর্মুলা নয়, তবে গড় মান দ্বারা দখল করা গড় আকারের (পৃষ্ঠাগুলিতে) pages_per_range
কিছুটা কম দিয়ে শুরু করুন a
। আপনি সম্ভবত হ্রাস করার চেষ্টা করছেন: একটি সাধারণ প্রশ্নের জন্য (ব্রিন পৃষ্ঠাগুলির স্ক্যান সংখ্যা) + (স্ক্যান করা হিপ পৃষ্ঠাগুলির সংখ্যা)। সন্ধান Heap Blocks: lossy=n
জন্য মৃত্যুদন্ড পরিকল্পনার pages_per_range=1
এবং জন্য অন্যান্য মান তুলনা pages_per_range
- অর্থাৎ দেখতে কত অপ্রয়োজনীয় গাদা ব্লক স্ক্যান করা হচ্ছে।
জিন / সারকথা
এগুলি এখানে বেশিরভাগ প্রাসঙ্গিক যেহেতু তারা বেশিরভাগ সম্পূর্ণ পাঠ্য অনুসন্ধানের জন্য ব্যবহৃত হয় তা নিশ্চিত নয়, তবে আমি এটিও শুনেছি যে তারা নকল কীগুলি ব্যবহার করার ক্ষেত্রে ভাল। হয় GIN
/ GiST
সূচক এখানে সাহায্য করবে?
জিন বিবেচনা করার মতো হতে পারে তবে সম্ভবত জিএসটি নয় - তবে যদি প্রাকৃতিক ক্লাস্টারিং সত্যিই ভাল হয় তবে ব্রিন সম্ভবত আরও ভাল বাজি হয়ে উঠবে।
এখানে আপনার মতো কিছুটা ডামি ডেটার জন্য বিভিন্ন সূচক প্রকারের মধ্যে একটি নমুনা তুলনা করা হল:
টেবিল এবং সূচি:
create table foo(a,b,c) as
select *, lpad('',20)
from (select chr(g) a from generate_series(97,122) g) a
cross join (select generate_series(1,100000) b) b
order by a;
create index foo_btree_covering on foo(a,b);
create index foo_btree on foo(a);
create index foo_gin on foo using gin(a);
create index foo_brin_2 on foo using brin(a) with (pages_per_range=2);
create index foo_brin_4 on foo using brin(a) with (pages_per_range=4);
vacuum analyze;
সম্পর্কের আকার:
select relname "name", pg_size_pretty(siz) "size", siz/8192 pages, (select count(*) from foo)*8192/siz "rows/page"
from( select relname, pg_relation_size(C.oid) siz
from pg_class c join pg_namespace n on n.oid = c.relnamespace
where nspname = current_schema ) z;
নাম | আকার | পৃষ্ঠা | সারি / পৃষ্ঠা
: ----------------- | : ------ | ----: | --------:
foo | 149 এমবি | 19118 | 135
foo_btree_covering | 56 এমবি | 7132 | 364
foo_btree | 56 এমবি | 7132 | 364
foo_gin | 2928 কেবি | 366 | 7103
foo_brin_2 | 264 কেবি | 33 | 78787
foo_brin_4 | 136 কেবি | 17 | 152941
বিট্রি আচ্ছাদন:
explain analyze select sum(b) from foo where a='a';
| QUERY প্ল্যান |
| : ------------------------------------------------- -------------------------------------------------- ------------------------------------------- |
| সমষ্টি (ব্যয় = 3282.57..3282.58 সারি = 1 প্রস্থ = 8) (আসল সময় = 45.942..45.942 সারি = 1 লুপ = 1) |
| -> foo_btree_covering এ foo_btree_covering ব্যবহার করে কেবল সূচক স্ক্যান করুন (ব্যয় = 0.43..3017.80 সারি = 105907 প্রস্থ = 4) (আসল সময় = 0.038..27.286 সারি = 100000 লুপ = 1) |
| সূচকের অবস্থা: (a = 'a' :: পাঠ্য) |
| গাদা ফেচ: 0 |
| পরিকল্পনার সময়: 0.099 এমএস |
| সম্পাদনের সময়: 45.968 এমএস |
সরল বিট্রি:
drop index foo_btree_covering;
explain analyze select sum(b) from foo where a='a';
| QUERY প্ল্যান |
| : ------------------------------------------------- -------------------------------------------------- ----------------------------- |
| সমষ্টি (খরচ = 4064.57..4064.58 সারি = 1 প্রস্থ = 8) (আসল সময় = 54.242..54.242 সারি = 1 লুপ = 1) |
| -> foo এ foo_btree ব্যবহার করে সূচক স্ক্যান (ব্যয় = 0.43..3799.80 সারি = 105907 প্রস্থ = 4) (আসল সময় = 0.037..33.084 সারি = 100000 লুপ = 1) |
| সূচকের অবস্থা: (a = 'a' :: পাঠ্য) |
| পরিকল্পনার সময়: 0.135 এমএস |
| সম্পাদনের সময়: 54.280 এমএস |
BRIN পৃষ্ঠাগুলি_পরে_আরঞ্জ = 4:
drop index foo_btree;
explain analyze select sum(b) from foo where a='a';
| QUERY প্ল্যান |
| : ------------------------------------------------- -------------------------------------------------- ----------------------------- |
| সমষ্টি (খরচ = 21595.38..21595.39 সারি = 1 প্রস্থ = 8) (আসল সময় = 52.455..52.455 সারি = 1 লুপ = 1) |
| -> foo এ বিটম্যাপ হ্যাপ স্ক্যান (ব্যয় = 888.78..21330.61 সারি = 105907 প্রস্থ = 4) (আসল সময় = 2.738..31.967 সারি = 100000 লুপ = 1) |
| পুনঃপরীক্ষা অবস্থা: (a = 'a' :: পাঠ্য) |
| সূচি পুনরায় পরীক্ষা করে সারিগুলি সরানো হয়েছে: 96 |
| গাদা ব্লক: ক্ষয়ক্ষতি = 736 |
| -> foo_brin_4 এ বিটম্যাপ সূচক স্ক্যান (ব্যয় = 0.00..862.30 সারি = 105907 প্রস্থ = 0) (আসল সময় = 2.720..2.720 সারি = 7360 লুপ = 1) |
| সূচকের অবস্থা: (a = 'a' :: পাঠ্য) |
| পরিকল্পনার সময়: 0.101 এমএস |
| কার্যকর করার সময়: 52.501 এমএস |
ব্রিন পৃষ্ঠাগুলি_প্রেম_আরঞ্জ = 2:
drop index foo_brin_4;
explain analyze select sum(b) from foo where a='a';
| QUERY প্ল্যান |
| : ------------------------------------------------- -------------------------------------------------- ----------------------------- |
| সমষ্টি (খরচ = 21659.38..21659.39 সারি = 1 প্রস্থ = 8) (আসল সময় = 53.971..53.971 সারি = 1 লুপ = 1) |
| -> foo- এ বিটম্যাপ হিপ স্ক্যান (ব্যয় = 952.78..21394.61 সারি = 105907 প্রস্থ = 4) (আসল সময় = 5.286..33.492 সারি = 100000 লুপ = 1) |
| পুনঃপরীক্ষা অবস্থা: (a = 'a' :: পাঠ্য) |
| সূচি পুনরায় পরীক্ষা করে সারিগুলি সরানো হয়েছে: 96 |
| গাদা ব্লক: ক্ষয়ক্ষতি = 736 |
| -> foo_brin_2 এ বিটম্যাপ সূচক স্ক্যান (ব্যয় = 0.00..926.30 সারি = 105907 প্রস্থ = 0) (আসল সময় = 5.275..5.275 সারি = 7360 লুপ = 1) |
| সূচকের অবস্থা: (a = 'a' :: পাঠ্য) |
| পরিকল্পনার সময়: 0.095 এমএস |
| কার্যকর করার সময়: 54.016 এমএস |
জিন:
drop index foo_brin_2;
explain analyze select sum(b) from foo where a='a';
| QUERY প্ল্যান |
| : ------------------------------------------------- -------------------------------------------------- ------------------------------ |
| সমষ্টি (খরচ = 21687.38..21687.39 সারি = 1 প্রস্থ = 8) (প্রকৃত সময় = 55.331..55.331 সারি = 1 লুপ = 1) |
| -> foo এ বিটম্যাপ হ্যাপ স্ক্যান (ব্যয় = 980.78..21422.61 সারি = 105907 প্রস্থ = 4) (প্রকৃত সময় = 12.377..33.956 সারি = 100000 লুপ = 1) |
| পুনঃপরীক্ষা অবস্থা: (a = 'a' :: পাঠ্য) |
| হিপ ব্লক: নির্ভুল = 736 |
| -> বিটম্যাপ ইনডেক্স স্ক্যান foo_gin এ (ব্যয় = 0.00..954.30 সারি = 105907 প্রস্থ = 0) (আসল সময় = 12.271..12.271 সারি = 100000 লুপ = 1) |
| সূচকের অবস্থা: (a = 'a' :: পাঠ্য) |
| পরিকল্পনার সময়: 0.118 এমএস |
| সম্পাদনের সময়: 55.366 এমএস |
এখানে ডিবিফিডল