Indekslar so'rov tezligini dramatik tarzda oshirishi mumkin.
Indeks nima?
Indeks β kitobdagi mundarijaga o'xshaydi. Indekssiz SQL barcha qatorlarni ko'rib chiqadi (Full Table Scan).
Indeks yaratish
-- Oddiy indeks
CREATE INDEX idx_talaba_email ON talabalar(email);
-- Noyob indeks
CREATE UNIQUE INDEX idx_talaba_email ON talabalar(email);
-- Murakkab indeks
CREATE INDEX idx_shahar_yosh ON talabalar(shahar, yosh);
-- Qisman indeks
CREATE INDEX idx_faol_talabalar ON talabalar(ism)
WHERE faol = TRUE;
Indeksni o'chirish
DROP INDEX idx_talaba_email;
EXPLAIN bilan tahlil
EXPLAIN SELECT * FROM talabalar WHERE email = 'test@gmail.com';
EXPLAIN ANALYZE SELECT * FROM talabalar WHERE email = 'test@gmail.com';
Qaysi ustunlarga indeks qo'yish kerak?
β
WHERE da ko'p ishlatiladigan ustunlar
β
JOIN da ishlatiladigan ustunlar (foreign key)
β
ORDER BY da ishlatiladigan ustunlar
β
Noyob qiymatlar ko'p bo'lgan ustunlar
β Kam o'zgaradigan kichik jadvallar
β Ko'p INSERT/UPDATE bo'ladigan jadvallar
β Boolean yoki kam noyob qiymatlar
Indeks turlari (PostgreSQL)
-- B-tree (standart)
CREATE INDEX idx1 ON t(col);
-- Hash (tenglik uchun)
CREATE INDEX idx2 ON t USING HASH(col);
-- GIN (JSON, massiv uchun)
CREATE INDEX idx3 ON t USING GIN(json_ustun);