11.2. Ð¢Ð¸Ð¿Ñ Ð¸Ð½Ð´ÐµÐºÑов #
Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÑколÑко Ñипов индекÑов: B-деÑево, Ñ
еÑ, GiST, SP-GiST, GIN, BRIN и ÑаÑÑиÑение bloom. ÐÐ»Ñ ÑазнÑÑ
Ñипов индекÑов пÑименÑÑÑÑÑ ÑазнÑе алгоÑиÑмÑ, оÑиенÑиÑованнÑе на опÑеделÑннÑе ÑÐ¸Ð¿Ñ Ð¸Ð½Ð´ÐµÐºÑиÑÑемÑÑ
пÑедложений. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° CREATE INDEX ÑоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ-B-деÑевÑÑ, ÑÑÑекÑивнÑе в болÑÑинÑÑве ÑлÑÑаев. ÐÑбÑаÑÑ Ð´ÑÑгой Ñип можно, напиÑав название Ñипа индекÑа поÑле клÑÑевого Ñлова USING. ÐапÑимеÑ, ÑоздаÑÑ Ñ
еÑ-Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñак:
CREATE INDEXимÑONÑаблиÑаUSING HASH (ÑÑолбеÑ);
11.2.1. B-деÑево #
B-деÑевÑÑ Ð¼Ð¾Ð³ÑÑ ÑабоÑаÑÑ Ð² ÑÑловиÑÑ Ð½Ð° ÑавенÑÑво и в пÑовеÑÐºÐ°Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð² Ñ Ð´Ð°Ð½Ð½Ñми, коÑоÑÑе можно оÑÑоÑÑиÑоваÑÑ Ð² некоÑоÑом поÑÑдке. ТоÑнее, планиÑовÑик запÑоÑов Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¸Ð½Ð´ÐµÐºÑ-B-деÑево, когда индекÑиÑÑемÑй ÑÑÐ¾Ð»Ð±ÐµÑ ÑÑаÑÑвÑÐµÑ Ð² ÑÑавнении Ñ Ð¾Ð´Ð½Ð¸Ð¼ из ÑледÑÑÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов:
< Â <= Â = Â >= Â >
ÐÑи обÑабоÑке конÑÑÑÑкÑий, пÑедÑÑавимÑÑ
как ÑоÑеÑание ÑÑиÑ
опеÑаÑоÑов, напÑÐ¸Ð¼ÐµÑ BETWEEN и IN, Ñак же Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð¾Ð¸Ñк по индекÑÑ-B-деÑевÑ. ÐÑоме Ñого, Ñакие индекÑÑ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¸ в ÑÑловиÑÑ
IS NULL и IS NOT NULL по индекÑиÑованнÑм ÑÑолбÑам.
Также опÑимизаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑи индекÑÑ Ð² запÑоÑаÑ
Ñ Ð¾Ð¿ÐµÑаÑоÑами ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑÐ°Ð±Ð»Ð¾Ð½Ñ LIKE и ~, еÑли ÑÑÐ¾Ñ Ñаблон опÑеделÑеÑÑÑ ÐºÐ¾Ð½ÑÑанÑой и он пÑивÑзан к наÑÐ°Ð»Ñ ÑÑÑоки â напÑимеÑ, col LIKE 'foo%' или col ~ '^foo', но не col LIKE '%bar'. Ðо еÑли ваÑа база даннÑÑ
иÑполÑзÑÐµÑ Ð½Ðµ Ð»Ð¾ÐºÐ°Ð»Ñ C, Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки индекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов Ñ Ñаблонами вам поÑÑебÑеÑÑÑ ÑоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ñо ÑпеÑиалÑнÑм клаÑÑом опеÑаÑоÑов; Ñм. Раздел 11.10. ÐндекÑÑ-B-деÑевÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð¸ Ð´Ð»Ñ ILIKE и ~*, но ÑолÑко еÑли Ñаблон наÑинаеÑÑÑ Ð½Ðµ Ñ Ð°Ð»ÑавиÑнÑÑ
Ñимволов, Ñо еÑÑÑ Ñимволов, не подвеÑженнÑÑ
пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑегиÑÑÑа.
B-деÑевÑÑ Ð¼Ð¾Ð³ÑÑ Ñакже пÑименÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , оÑÑоÑÑиÑованнÑÑ Ð¿Ð¾ поÑÑдкÑ. ÐÑо не вÑегда бÑÑÑÑее пÑоÑÑого ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑоÑÑиÑовки, но иногда бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾.
11.2.2. Ð¥ÐµÑ #
ХеÑ-индекÑÑ Ñ
ÑанÑÑ 32-биÑнÑй Ñ
еÑ-код, полÑÑеннÑй из знаÑÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑиÑованного ÑÑолбÑа, поÑÑÐ¾Ð¼Ñ Ñ
еÑ-индекÑÑ ÑабоÑаÑÑ ÑолÑко Ñ Ð¿ÑоÑÑÑми ÑÑловиÑми ÑавенÑÑва. ÐланиÑовÑик запÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑимениÑÑ Ñ
еÑ-индекÑ, ÑолÑко еÑли индекÑиÑÑемÑй ÑÑÐ¾Ð»Ð±ÐµÑ ÑÑаÑÑвÑÐµÑ Ð² ÑÑавнении Ñ Ð¾Ð¿ÐµÑаÑоÑом =. СоздаÑÑ Ñакой Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑледÑÑÑей командой:
CREATE INDEXимÑONÑаблиÑаUSING HASH (ÑÑолбеÑ);
11.2.3. GiST #
GiST-индекÑÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой не пÑоÑÑо ÑазновидноÑÑÑ Ð¸Ð½Ð´ÐµÐºÑов, а инÑÑаÑÑÑÑкÑÑÑÑ, позволÑÑÑÑÑ ÑеализоваÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑазнÑÑ ÑÑÑаÑегий индекÑиÑованиÑ. Ðак ÑледÑÑвие, GiST-индекÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿ÑименÑÑÑÑÑ Ñ ÑазнÑми опеÑаÑоÑами, в завиÑимоÑÑи Ð¾Ñ ÑÑÑаÑегии индекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (клаÑÑа опеÑаÑоÑов). ÐапÑимеÑ, ÑÑандаÑÑнÑй диÑÑÑибÑÑив Postgres Pro вклÑÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ Ð´Ð²ÑмеÑнÑÑ Ñипов геомеÑÑиÑеÑÐºÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑо позволÑÐµÑ Ð¿ÑименÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² запÑоÑÐ°Ñ Ñ Ð¾Ð¿ÐµÑаÑоÑами:
<< Â &< Â &> Â >> Â <<| Â &<| Â |&> Â |>> Â @> Â <@ Â ~= Â &&
(ÐÑи опеÑаÑоÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.11.) ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 63.1. РколлекÑии contrib можно найÑи и дÑÑгие клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST, ÑеализованнÑе как оÑделÑнÑе пÑоекÑÑ. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 63.2.
GiST-индекÑÑ Ñакже могÑÑ Ð¾Ð¿ÑимизиÑоваÑÑ Ð¿Ð¾Ð¸Ñк «ближайÑего ÑоÑеда», напÑÐ¸Ð¼ÐµÑ Ñакой:
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
коÑоÑÑй возвÑаÑÐ°ÐµÑ Ð´ÐµÑÑÑÑ ÑаÑположений, ближайÑÐ¸Ñ Ðº заданной ÑоÑке. ÐозможноÑÑÑ Ñакого пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа опÑÑÑ Ð¶Ðµ завиÑÐ¸Ñ Ð¾Ñ ÐºÐ»Ð°ÑÑа иÑполÑзÑемого опеÑаÑоÑа. ÐпеÑаÑоÑÑ, коÑоÑÑе можно иÑполÑзоваÑÑ Ñаким обÑазом, пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 63.1, в ÑÑолбÑе «ÐпеÑаÑоÑÑ ÑоÑÑиÑовки».
11.2.4. SP-GiST #
ÐндекÑÑ SP-GiST, как и GiST, пÑедоÑÑавлÑÑÑ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑÑ, поддеÑживаÑÑÑÑ ÑазлиÑнÑе ÑÐ¸Ð¿Ñ Ð¿Ð¾Ð¸Ñка. SP-GiST позволÑÐµÑ Ð¾ÑганизовÑваÑÑ Ð½Ð° диÑке ÑамÑе ÑазнÑе неÑбаланÑиÑованнÑе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , Ñакие как деÑевÑÑ ÐºÐ²Ð°Ð´ÑанÑов, k-меÑнÑе и пÑеÑикÑнÑе деÑевÑÑ. ÐапÑимеÑ, ÑÑандаÑÑнÑй диÑÑÑибÑÑив Postgres Pro вклÑÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов SP-GiST Ð´Ð»Ñ ÑоÑек в двÑмеÑном пÑоÑÑÑанÑÑве, ÑÑо позволÑÐµÑ Ð¿ÑименÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² запÑоÑÐ°Ñ Ñ Ð¾Ð¿ÐµÑаÑоÑами:
<< Â >> Â ~= Â <@ Â <<| Â |>>
(ÐÑи опеÑаÑоÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.11.) ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов SP-GiST, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 63.2. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 63.3.
ÐндекÑÑ SP-GiST, как и GiST, поддеÑживаÑÑ Ð¿Ð¾Ð¸Ñк ближайÑÐ¸Ñ ÑоÑедей. ÐÐ»Ñ ÐºÐ»Ð°ÑÑов опеÑаÑоÑов SP-GiST, поддеÑживаÑÑÐ¸Ñ ÑпоÑÑдоÑивание по ÑаÑÑÑоÑниÑ, ÑооÑвеÑÑÑвÑÑÑий опеÑаÑÐ¾Ñ Ñказан в ÑÑолбÑе «ÐпеÑаÑоÑÑ ÑпоÑÑдоÑиваниÑ» в ТаблиÑе 63.2.
11.2.5. GIN #
GIN-индекÑÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой «инвеÑÑиÑованнÑе индекÑÑ», в коÑоÑÑÑ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñ Ð½ÐµÑколÑкими клÑÑами, напÑÐ¸Ð¼ÐµÑ Ð¼Ð°ÑÑивÑ. ÐнвеÑÑиÑованнÑй Ð¸Ð½Ð´ÐµÐºÑ ÑодеÑÐ¶Ð¸Ñ Ð¾ÑделÑнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð»Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ компоненÑа, и Ð¼Ð¾Ð¶ÐµÑ ÑÑÑекÑивно ÑабоÑаÑÑ Ð² запÑоÑÐ°Ñ , пÑовеÑÑÑÑÐ¸Ñ Ð¿ÑиÑÑÑÑÑвие опÑеделÑннÑÑ Ð·Ð½Ð°Ñений компоненÑов.
Ðодобно GiST и SP-GiST, индекÑÑ GIN могÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑазлиÑнÑе опÑеделÑннÑе полÑзоваÑелем ÑÑÑаÑегии и в завиÑимоÑÑи Ð¾Ñ Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑименÑÑÑÑÑ Ñ ÑазнÑми опеÑаÑоÑами. ÐапÑимеÑ, ÑÑандаÑÑнÑй диÑÑÑибÑÑив Postgres Pro вклÑÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов GIN Ð´Ð»Ñ Ð¼Ð°ÑÑивов, ÑÑо позволÑÐµÑ Ð¿ÑименÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² запÑоÑÐ°Ñ Ñ Ð¾Ð¿ÐµÑаÑоÑами:
<@ Â @> Â = Â &&
(ÐÑи опеÑаÑоÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.19.) ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов GIN, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 63.3. РколлекÑии contrib и в оÑделÑнÑÑ
пÑоекÑаÑ
можно найÑи и много дÑÑгиÑ
клаÑÑов опеÑаÑоÑов GIN. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 63.4.
11.2.6. BRIN #
BRIN-индекÑÑ (ÑокÑаÑение Ð¾Ñ Block Range INdexes, ÐндекÑÑ Ð·Ð¾Ð½ блоков) Ñ ÑанÑÑ Ð¾Ð±Ð¾Ð±ÑÑннÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ знаÑениÑÑ , Ð½Ð°Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑ Ð² ÑизиÑеÑки поÑледоваÑелÑно ÑаÑположеннÑÑ Ð±Ð»Ð¾ÐºÐ°Ñ ÑаблиÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ñакие индекÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑÐ¸Ð²Ð½Ñ Ð´Ð»Ñ ÑÑолбÑов, знаÑÐµÐ½Ð¸Ñ Ð² коÑоÑÑÑ Ñ Ð¾ÑоÑо коÑÑелиÑÑÑÑ Ñ ÑизиÑеÑким поÑÑдком ÑÑолбÑов ÑаблиÑÑ. Ðодобно GiST, SP-GiST и GIN, индекÑÑ BRIN могÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð¾Ð¿ÑеделÑннÑе полÑзоваÑелем ÑÑÑаÑегии и в завиÑимоÑÑи Ð¾Ñ Ð½Ð¸Ñ Ð¿ÑименÑÑÑÑÑ Ñ ÑазнÑми опеÑаÑоÑами. ÐÐ»Ñ Ñипов даннÑÑ , имеÑÑÐ¸Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ñй поÑÑдок ÑоÑÑиÑовки, запиÑÑм в индекÑе ÑооÑвеÑÑÑвÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑе и макÑималÑнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑÑолбÑе Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð². ÐÑо позволÑÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð·Ð°Ð¿ÑоÑÑ Ñо ÑледÑÑÑими опеÑаÑоÑами:
< Â <= Â = Â >= Â >
ÐлаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов BRIN, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 63.4. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 63.5.