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:

SQL · namuna baza

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 (odatda idx_jadval_ustun uslubida).
  • 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, DELETE da 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:

  1. narx ustuniga indeks yarating;
  2. indeksdan keyin WHERE narx > 10000 so’rovini bajaring;
  3. EXPLAIN QUERY PLAN bilan reja o’zgarganini ko’ring;
  4. indeksni DROP INDEX bilan o’chiring va rejani qayta ko’ring;
  5. nom ustuniga 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/JOIN da ishlatiladigan ustunlarga qo’yiladi.
  • Narxi bor: qo’shimcha joy va sekinroq yozish — shuning uchun har ustunga emas.
  • PRIMARY KEY ga indeks avtomatik yaratiladi.

Keyingi darsda CREATE TABLE — o’z jadvalingizni noldan yaratishni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi