11.2. Ð¢Ð¸Ð¿Ñ Ð¸Ð½Ð´ÐµÐºÑов
Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÑколÑко Ñипов индекÑов: B-деÑево, Ñ
еÑ, GiST, SP-GiST, GIN и BRIN. ÐÐ»Ñ ÑазнÑÑ
Ñипов индекÑов пÑименÑÑÑÑÑ ÑазнÑе алгоÑиÑмÑ, оÑиенÑиÑованнÑе на опÑеделÑннÑе ÑÐ¸Ð¿Ñ Ð·Ð°Ð¿ÑоÑов. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° CREATE INDEX ÑоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ñипа B-деÑево, ÑÑÑекÑивнÑе в болÑÑинÑÑве ÑлÑÑаев.
B-деÑевÑÑ Ð¼Ð¾Ð³ÑÑ ÑабоÑаÑÑ Ð² ÑÑловиÑÑ Ð½Ð° ÑавенÑÑво и в пÑовеÑÐºÐ°Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð² Ñ Ð´Ð°Ð½Ð½Ñми, коÑоÑÑе можно оÑÑоÑÑиÑоваÑÑ Ð² некоÑоÑом поÑÑдке. ТоÑнее, планиÑовÑик запÑоÑов Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¸Ð½Ð´ÐµÐºÑ-B-деÑево, когда индекÑиÑÑемÑй ÑÑÐ¾Ð»Ð±ÐµÑ ÑÑаÑÑвÑÐµÑ Ð² ÑÑавнении Ñ Ð¾Ð´Ð½Ð¸Ð¼ из ÑледÑÑÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов:
< |
<= |
= |
>= |
> |
ÐÑи обÑабоÑке конÑÑÑÑкÑий, пÑедÑÑавимÑÑ
как ÑоÑеÑание ÑÑиÑ
опеÑаÑоÑов, напÑÐ¸Ð¼ÐµÑ BETWEEN и IN, Ñак же Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð¾Ð¸Ñк по индекÑÑ-B-деÑевÑ. ÐÑоме Ñого, Ñакие индекÑÑ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¸ в ÑÑловиÑÑ
IS NULL и IS NOT NULL по индекÑиÑованнÑм ÑÑолбÑам.
Также опÑимизаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑи индекÑÑ Ð² запÑоÑаÑ
Ñ Ð¾Ð¿ÐµÑаÑоÑами ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑÐ°Ð±Ð»Ð¾Ð½Ñ LIKE и ~, еÑли ÑÑÐ¾Ñ Ñаблон опÑеделÑеÑÑÑ ÐºÐ¾Ð½ÑÑанÑой и он пÑивÑзан к наÑÐ°Ð»Ñ ÑÑÑоки â напÑимеÑ, col LIKE 'foo%' или col ~ '^foo', но не col LIKE '%bar'. Ðо еÑли ваÑа база даннÑÑ
иÑполÑзÑÐµÑ Ð½Ðµ Ð»Ð¾ÐºÐ°Ð»Ñ C, Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки индекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов Ñ Ñаблонами вам поÑÑебÑеÑÑÑ ÑоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ñо ÑпеÑиалÑнÑм клаÑÑом опеÑаÑоÑов; Ñм. Раздел 11.9. ÐндекÑÑ-B-деÑевÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð¸ Ð´Ð»Ñ ILIKE и ~*, но ÑолÑко еÑли Ñаблон наÑинаеÑÑÑ Ð½Ðµ Ñ Ð°Ð»ÑавиÑнÑÑ
Ñимволов, Ñо еÑÑÑ Ñимволов, не подвеÑженнÑÑ
пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑегиÑÑÑа.
B-деÑевÑÑ Ð¼Ð¾Ð³ÑÑ Ñакже пÑименÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , оÑÑоÑÑиÑованнÑÑ Ð¿Ð¾ поÑÑдкÑ. ÐÑо не вÑегда бÑÑÑÑее пÑоÑÑого ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑоÑÑиÑовки, но иногда бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾.
ХеÑ-индекÑÑ ÑабоÑаÑÑ ÑолÑко Ñ Ð¿ÑоÑÑÑми ÑÑловиÑми ÑавенÑÑва. ÐланиÑовÑик запÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑимениÑÑ Ñ
еÑ-индекÑ, ÑолÑко еÑли индекÑиÑÑемÑй ÑÑÐ¾Ð»Ð±ÐµÑ ÑÑаÑÑвÑÐµÑ Ð² ÑÑавнении Ñ Ð¾Ð¿ÐµÑаÑоÑом =. СоздаÑÑ Ñакой Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑледÑÑÑей командой:
CREATE INDEXимÑONÑаблиÑаUSING HASH (ÑÑолбеÑ);
Ðнимание
ÐпеÑаÑии Ñ Ñ
еÑ-индекÑами в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ пÑоÑ
одÑÑ ÑеÑез WAL, Ñак ÑÑо поÑле аваÑийной оÑÑановки Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¿ÐµÑеÑÑÑоиÑÑ Ñ
еÑ-индекÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ REINDEX. ÐÑоме Ñого, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñ
еÑ-индекÑаÑ
поÑле наÑалÑной копии не пеÑеноÑÑÑÑÑ Ð¿Ñи поÑоковой или Ñайловой ÑепликаÑии, Ñак ÑÑо в поÑледÑÑÑиÑ
запÑоÑаÑ
они бÑдÑÑ Ð´Ð°Ð²Ð°ÑÑ Ð½ÐµÐ¿ÑавилÑнÑе оÑвеÑÑ. Ðо ÑÑим пÑиÑинам наÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð½Ðµ иÑполÑзоваÑÑ Ð¸Ñ
.
GiST-индекÑÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой не пÑоÑÑо ÑазновидноÑÑÑ Ð¸Ð½Ð´ÐµÐºÑов, а инÑÑаÑÑÑÑкÑÑÑÑ, позволÑÑÑÑÑ ÑеализоваÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑазнÑÑ ÑÑÑаÑегий индекÑиÑованиÑ. Ðак ÑледÑÑвие, GiST-индекÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿ÑименÑÑÑÑÑ Ñ ÑазнÑми опеÑаÑоÑами, в завиÑимоÑÑи Ð¾Ñ ÑÑÑаÑегии индекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (клаÑÑа опеÑаÑоÑов). ÐапÑимеÑ, ÑÑандаÑÑнÑй диÑÑÑибÑÑив Postgres Pro вклÑÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ Ð´Ð²ÑмеÑнÑÑ Ñипов геомеÑÑиÑеÑÐºÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑо позволÑÐµÑ Ð¿ÑименÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² запÑоÑÐ°Ñ Ñ Ð¾Ð¿ÐµÑаÑоÑами:
<< |
&< |
&> |
>> |
<<| |
&<| |
|&> |
|>> |
@> |
<@ |
~= |
&& |
(ÐÑи опеÑаÑоÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.11.) ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 57.1. РколлекÑии contrib можно найÑи и дÑÑгие клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST, ÑеализованнÑе как оÑделÑнÑе пÑоекÑÑ. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 57.
GiST-индекÑÑ Ñакже могÑÑ Ð¾Ð¿ÑимизиÑоваÑÑ Ð¿Ð¾Ð¸Ñк «ближайÑего ÑоÑеда», напÑÐ¸Ð¼ÐµÑ Ñакой:
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
коÑоÑÑй возвÑаÑÐ°ÐµÑ Ð´ÐµÑÑÑÑ ÑаÑположений, ближайÑÐ¸Ñ Ðº заданной ÑоÑке. ÐозможноÑÑÑ Ñакого пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа опÑÑÑ Ð¶Ðµ завиÑÐ¸Ñ Ð¾Ñ ÐºÐ»Ð°ÑÑа иÑполÑзÑемого опеÑаÑоÑа. ÐпеÑаÑоÑÑ, коÑоÑÑе можно иÑполÑзоваÑÑ Ñаким обÑазом, пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 57.1, в ÑÑолбÑе «ÐпеÑаÑоÑÑ ÑоÑÑиÑовки».
ÐндекÑÑ SP-GiST, как и GiST, пÑедоÑÑавлÑÑÑ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑÑ, поддеÑживаÑÑÑÑ ÑазлиÑнÑе ÑÐ¸Ð¿Ñ Ð¿Ð¾Ð¸Ñка. SP-GiST позволÑÐµÑ Ð¾ÑганизовÑваÑÑ Ð½Ð° диÑке ÑамÑе ÑазнÑе неÑбаланÑиÑованнÑе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , Ñакие как деÑевÑÑ ÐºÐ²Ð°Ð´ÑанÑов, k-меÑнÑе и пÑеÑикÑнÑе деÑевÑÑ. ÐапÑимеÑ, ÑÑандаÑÑнÑй диÑÑÑибÑÑив Postgres Pro вклÑÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов SP-GiST Ð´Ð»Ñ ÑоÑек в двÑмеÑном пÑоÑÑÑанÑÑве, ÑÑо позволÑÐµÑ Ð¿ÑименÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² запÑоÑÐ°Ñ Ñ Ð¾Ð¿ÐµÑаÑоÑами:
<< |
>> |
~= |
<@ |
<^ |
>^ |
(ÐÑи опеÑаÑоÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.11.) ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов SP-GiST, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 58.1. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 58.
GIN-индекÑÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой «инвеÑÑиÑованнÑе индекÑÑ», в коÑоÑÑÑ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñ Ð½ÐµÑколÑкими клÑÑами, напÑÐ¸Ð¼ÐµÑ Ð¼Ð°ÑÑивÑ. ÐнвеÑÑиÑованнÑй Ð¸Ð½Ð´ÐµÐºÑ ÑодеÑÐ¶Ð¸Ñ Ð¾ÑделÑнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð»Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ компоненÑа, и Ð¼Ð¾Ð¶ÐµÑ ÑÑÑекÑивно ÑабоÑаÑÑ Ð² запÑоÑÐ°Ñ , пÑовеÑÑÑÑÐ¸Ñ Ð¿ÑиÑÑÑÑÑвие опÑеделÑннÑÑ Ð·Ð½Ð°Ñений компоненÑов.
Ðодобно GiST и SP-GiST, индекÑÑ GIN могÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑазлиÑнÑе опÑеделÑннÑе полÑзоваÑелем ÑÑÑаÑегии и в завиÑимоÑÑи Ð¾Ñ Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑименÑÑÑÑÑ Ñ ÑазнÑми опеÑаÑоÑами. ÐапÑимеÑ, ÑÑандаÑÑнÑй диÑÑÑибÑÑив Postgres Pro вклÑÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GIN Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¼ÐµÑнÑÑ Ð¼Ð°ÑÑивов, ÑÑо позволÑÐµÑ Ð¿ÑименÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² запÑоÑÐ°Ñ Ñ Ð¾Ð¿ÐµÑаÑоÑами:
<@ |
@> |
= |
&& |
(ÐÑи опеÑаÑоÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.18.) ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GIN, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 59.1. РколлекÑии contrib можно найÑи и дÑÑгие клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GIN, ÑеализованнÑе как оÑделÑнÑе пÑоекÑÑ. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 59.
BRIN-индекÑÑ (ÑокÑаÑение Ð¾Ñ Block Range INdexes, ÐндекÑÑ Ð·Ð¾Ð½ блоков) Ñ ÑанÑÑ Ð¾Ð±Ð¾Ð±ÑÑннÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ знаÑениÑÑ , Ð½Ð°Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑ Ð² ÑизиÑеÑки поÑледоваÑелÑно ÑаÑположеннÑÑ Ð±Ð»Ð¾ÐºÐ°Ñ ÑаблиÑÑ. Ðодобно GiST, SP-GiST и GIN, индекÑÑ BRIN могÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð¾Ð¿ÑеделÑннÑе полÑзоваÑелем ÑÑÑаÑегии, и в завиÑимоÑÑи Ð¾Ñ Ð½Ð¸Ñ Ð¿ÑименÑÑÑÑÑ Ñ ÑазнÑми опеÑаÑоÑами. ÐÐ»Ñ Ñипов даннÑÑ , имеÑÑÐ¸Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ñй поÑÑдок ÑоÑÑиÑовки, запиÑÑм в индекÑе ÑооÑвеÑÑÑвÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑе и макÑималÑнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑÑолбÑе Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð². ÐÑо позволÑÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð·Ð°Ð¿ÑоÑÑ Ñо ÑледÑÑÑими опеÑаÑоÑами:
< |
<= |
= |
>= |
> |
ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов BRIN, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 60.1. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 60.