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);