PostgreSQL-ში რა ტიპის ინდექსები არსებობს?
sobes.tech AI
პასუხი AI-სგან
მთავარი ინდექსების ტიპები შემდეგია:
-
B-ხე (B-ხე) - ყველაზე გავრცელებული ტიპი, რომელიც ადაპტირებულია უმეტეს ჩვეულებრივ შეკითხვებზე (ტოლი, შედარება, დიაპაზონი). დაფუძნებულია ბალანსირებულ ხეზე.
-
Hash (ჰეში) - გამოიყენება ტოლი (=) შემოწმებისთვის. უფრო სწრაფია, ვიდრე B-ხე ამგვარ შეკითხვებზე, მაგრამ არ უჭერს მხარს შედარებებს და დიაპაზონებს. ინახავს გასაღების ჰეშ-ღირებულებას და მითითებას სტრიქონზე.
-
GiST (Generalized Search Tree) - ზოგადი ძიების ხის სტრუქტურა, საშუალებას აძლევს სხვადასხვა ინდექსების შექმნას რთული მონაცემთა ტიპებისთვის (გეოგრაფიული, ტექსტური, სრული ტექსტური ძიება). დაფუძნებულია ბალანსირებულ ხეზე.
-
SP-GiST (Space-Partitioned Generalized Search Tree) - სპეციალიზებული ვერსია GiST-ისთვის მონაცემებისთვის, რომლებიც შეიძლება განაწილდეს სივრცის მიხედვით (მაგალითად, წერტილები, მართკუთხილები). მაგალითები: k-d ხეები, quadtree.
-
GIN (Generalized Inverted Index) - ზოგადი ინვერტული ინდექსი, ძირითადად გამოიყენება კომპლექსური მნიშვნელობების შიგნით ელემენტების ძიებისთვის (მაგალითად, მასივები, JSONB). ხშირად გამოიყენება სრული ტექსტური ძიებისთვის.
-
BRIN (Block Range INdex) - ბლოკების დიაპაზონის ინდექსი. შესაფერისია ძალიან დიდ ცხრილებისთვის, სადაც მონაცემები ბუნებრივად არის მოწესრიგებული (მაგალითად, დროით). ინდექსირებს ფიზიკურ ბლოკებში მნიშვნელობების დიაპაზონს.
-
Bloom (Bloom ფილტრი) - არ არის ტრადიციული ინდექსი, არამედ ალბათობით დაფუძნებული მონაცემთა სტრუქტურა სწრაფი შემოწმებისთვის, თუ ელემენტი არ არსებობს. გამოიყენება ძალიან დიდ ცხრილებში სწრაფი შერჩევისთვის, როდესაც ზუსტი შესაბამისობა არ არის საჭირო ან როგორც დამატებითი ფილტრი ძირითადი ინდექსის სკანირებამდე.
გამოყენების მაგალითები:
- B-ხე: ინდექსი რიცხვით ველებზე, თარიღებზე, სტრიქონებზე დიაპაზონის ძიებისთვის (
WHERE amount > 100). - Hash: იშვიათად გამოიყენება პირდაპირ, რადგან B-ხე ჩვეულებრივ უფრო სწრაფია.
- GiST: გეოგრაფიული ინდექსები (
gist(location)), სრული ტექსტური ძიების ინდექსები (to_tsvector). - SP-GiST: ორი განზომილებიანი მონაცემებისთვის ინდექსები (
spgist(point)). - GIN: მასივების ინდექსები (
gin(tags)), JSONB (gin(data)), სრული ტექსტური ძიება. - BRIN: ინდექსი
timestampველზე ლოგების ცხრილში, სადაც მონაცემები დროით არის მოწესრიგებული. - Bloom: ინდექსი სვეტების ნაკრებისთვის (
bloom(col1, col2, col3)), რათა სწრაფად გამორიცხოს სტრიქონები, სადაც მნიშვნელობების კომბინაცია ნამდვილად არ არის წარმოდგენილი.
ინდექსის ტიპის არჩევა დამოკიდებულია სვეტის მონაცემთა ტიპზე და იმ შეკითხვების ტიპზე, რომლებიც უნდა იყოს ოპტიმიზირებული.