Indekslar va EXPLAIN
229 daq
Jadvalda yuzta qator bo‘lsa, baza ularni bir zumda ko‘zdan kechiradi. Million qator bo‘lsa — har bir so‘rov uchun hammasini o‘qib chiqish sekin. Bu muammoni indeks hal qiladi.
Indeks — kitob oxiridagi ko‘rsatkich
Kitobdan «tranzaksiya» so‘zini topish uchun hamma sahifani varaqlamaysiz — oxiridagi alifbo ko‘rsatkichiga qaraysiz va kerakli sahifaga o‘tasiz. Indeks xuddi shunday: ustun qiymatlari tartiblangan holda alohida saqlanadi va har biri qatorga ishora qiladi.
CREATE INDEX idx_students_city ON students (city);Endi WHERE city = 'Samarqand' butun jadvalni emas, faqat indeksni o‘qiydi.
Baza so‘rovni qanday bajaradi: EXPLAIN
EXPLAIN so‘rovni bajarmaydi, faqat rejasini ko‘rsatadi:
PostgreSQL rejasida Index Scan using students_pkey — birlamchi kalit indeksidan foydalanildi. Seq Scan esa — butun jadval ketma-ket o‘qildi degani.
Indeks yo‘q ustun bo‘yicha qidiruv:
Bu yerda baza butun jadvalni o‘qiydi — city ga indeks yo‘q.
Indeks qachon kerak
WHERE,JOIN … ON,ORDER BYda tez-tez ishlatiladigan ustunlar;- tashqi kalit ustunlari (
grades.student_id) —JOINlar tezlashadi; - takrorlanmasligi kerak bo‘lgan ustunlar —
CREATE UNIQUE INDEX.
Birlamchi kalit va UNIQUE uchun indeks avtomatik yaratiladi.
PostgreSQL tashqi kalit ustuniga indeksni o‘zi yaratmaydi — uni qo‘lda qo‘shish kerak: CREATE INDEX ON grades (student_id);
Indeksning narxi
Indeks bepul emas:
- diskda joy egallaydi;
- har bir
INSERT,UPDATE,DELETEindeksni ham yangilaydi — yozish sekinlashadi.
Shuning uchun «har bir ustunga indeks» — yomon fikr. Indeksni aniq sekin so‘rov uchun, EXPLAIN bilan tekshirib qo‘shing.
Indeks ishlamay qoladigan holatlar
- ustun funksiya ichida:
WHERE UPPER(city) = 'TOSHKENT'— oddiy indeks ishlatilmaydi; LIKE '%bek'— boshi noma’lum andaza;- juda kichik jadval — baza baribir hammasini o‘qishni afzal ko‘radi.
Ko‘p ustunli indeks
CREATE INDEX idx_orders_customer_date ON orders (customer_id, ordered_at);U WHERE customer_id = 5 va WHERE customer_id = 5 AND ordered_at > … uchun ishlaydi, lekin faqat WHERE ordered_at > … uchun emas — tartib muhim (telefon kitobi avval familiya, keyin ism bo‘yicha tartiblangan).
Esda qoldiring
- Indeks — qidirishni tezlashtiradigan tartiblangan ko‘rsatkich.
EXPLAIN— so‘rov rejasini ko‘rsatadi; to‘liq skanerlashni topish uchun ishlating.- Indeks o‘qishni tezlashtiradi, yozishni sekinlashtiradi — o‘ylab qo‘shing.