SQL INDEX — so'rovni tezlashtirish
Kichik namuna bazamizda so’rovlar bir zumda ishlaydi — atigi bir necha
qator. Lekin jadvalda million qator bo’lsa-chi? O’sha paytda WHERE bilan
qidiruv sekinlashib qoladi. Yechim — INDEX (indeks). Bu darsda indeks
nima ekanini va so’rovni qanday tezlashtirishini ko’ramiz.
Muammo: baza har qatorni ko’zdan kechiradi
Quyidagi so’rovni ko’ring:
SELECT * FROM buyurtmalar WHERE mijoz_id = 1;
O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:
Indekssiz baza bu so’rovni bajarish uchun butun jadvalni boshdan-oxir
o’qib chiqadi va har qatorda mijoz_id = 1 ekanini tekshiradi. 6 qatorda
bu sezilmaydi, ammo 1 000 000 qatorda — million tekshiruv, ya’ni sekin.
Indeks — kitob oxiridagi ko’rsatkich
Indeks — kitob oxiridagi alifboli ko’rsatkichga o’xshaydi. “Python” so’zi qaysi sahifada ekanini bilish uchun butun kitobni varaqlamaysiz — ko’rsatkichga qaraysiz va to’g’ri sahifaga o’tasiz.
Baza indeksi ham xuddi shunday: muayyan ustun qiymatlari qaysi qatorda ekanini oldindan tartiblab saqlaydi. Natijada baza butun jadvalni o’qimay, to’g’ridan-to’g’ri kerakli qatorlarga o’tadi.
Indeks yaratish
Indeks CREATE INDEX bilan yaratiladi. Tez-tez WHERE yoki
JOIN da ishlatiladigan ustunga qo’yiladi:
CREATE INDEX idx_buyurtmalar_mijoz
ON buyurtmalar(mijoz_id);
idx_buyurtmalar_mijoz— indeks nomi (odatdaidx_jadval_ustunuslubida).buyurtmalar(mijoz_id)— qaysi jadvalning qaysi ustuni indekslanadi.
Endi WHERE mijoz_id = 1 so’rovi indeksdan foydalanadi va million qatorda
ham tez ishlaydi.
Indeks bepul emas
Indeks qidiruvni tezlashtiradi, lekin uning narxi bor:
- Joy egallaydi — indeks alohida saqlanadi, ya’ni qo’shimcha xotira.
- Yozishni sekinlashtiradi — har
INSERT,UPDATE,DELETEda indeks ham yangilanishi kerak.
Shuning uchun har ustunga indeks qo’yish yaxshi emas. Indeks tez-tez qidiriladigan yoki bog’lanadigan ustunlarga qo’yiladi.
Qachon indeks qo’yiladi
| Holat | Indeks kerakmi |
|---|---|
WHERE da tez-tez qidiriladigan ustun |
Ha |
JOIN da bog’lanadigan foreign key |
Ha |
PRIMARY KEY ustuni |
Yo’q — avtomatik bor |
| Kamdan-kam so’raladigan ustun | Yo’q — faqat yuk |
Amaliy mashq
Indeks yarating:
narxustuniga indeks yarating;- indeksdan keyin
WHERE narx > 10000so’rovini bajaring; EXPLAIN QUERY PLANbilan reja o’zgarganini ko’ring;- indeksni
DROP INDEXbilan o’chiring va rejani qayta ko’ring; nomustuniga ham indeks qo’shing.
Kichik jadvalda tezlik farqi sezilmaydi — indeks qachon foyda beradi?
Qisqacha xulosa
- Indeks — kitob ko’rsatkichi kabi: baza butun jadvalni o’qimay, kerakli qatorga to’g’ri o’tadi.
CREATE INDEX nom ON jadval(ustun)bilan yaratiladi.- Tez-tez
WHERE/JOINda ishlatiladigan ustunlarga qo’yiladi. - Narxi bor: qo’shimcha joy va sekinroq yozish — shuning uchun har ustunga emas.
PRIMARY KEYga indeks avtomatik yaratiladi.
Keyingi darsda CREATE TABLE — o’z jadvalingizni
noldan yaratishni ko’ramiz.