SQL EXPLAIN — so'rov rejasini o'qish

Optimizatsiya darsida so’rovni tezlashtirish usullarini ko’rdik. Lekin so’rov aslida qanday bajarilayotganini qayerdan bilamiz? Buni EXPLAIN QUERY PLAN ko’rsatadi — u bazaning “ish rejasi”ni ochib beradi.

So’rov rejasini ko’rish

So’rov oldiga EXPLAIN QUERY PLAN qo’yamiz (SQLite’da):

EXPLAIN QUERY PLAN
SELECT * FROM buyurtmalar WHERE mijoz_id = 1;

O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:

SQL · namuna baza

Indekssiz javob taxminan shunday bo’ladi:

SCAN buyurtmalar

SCAN — baza butun jadvalni boshdan-oxir o’qiyapti degani. Kichik jadvalda muammo emas, katta jadvalda esa sekin.

Indeksdan keyin

Endi mijoz_id ga indeks qo’yamiz va rejani qayta ko’ramiz:

CREATE INDEX idx_buyurtmalar_mijoz ON buyurtmalar(mijoz_id);

EXPLAIN QUERY PLAN
SELECT * FROM buyurtmalar WHERE mijoz_id = 1;

Endi javob o’zgaradi:

SEARCH buyurtmalar USING INDEX idx_buyurtmalar_mijoz (mijoz_id=?)

SEARCH ... USING INDEX — baza butun jadvalni o’qimay, indeks orqali to’g’ri qatorga o’tyapti degani. Indeks ishlaganini shu bilan tasdiqlaysiz.

Amaliy mashq

So’rov rejasini o’qing:

  1. EXPLAIN QUERY PLAN bilan oddiy SELECT rejasini ko’ring;
  2. WHERE qo’shib, reja o’zgarishini kuzating;
  3. narx ga indeks yaratib, rejani qayta oling;
  4. JOIN li so’rovning rejasini ko’ring;
  5. SCAN va SEARCH so’zlarini natijada toping.

SCAN va SEARCH orasidagi farq nimani anglatadi?

Qisqacha xulosa

  • EXPLAIN QUERY PLAN — baza so’rovni qanday bajarayotganini ko’rsatadi.
  • SCAN — butun jadvalni o’qish (katta jadvalda sekin).
  • SEARCH ... USING INDEX — indeks orqali tez qidiruv.
  • Indeks qo’ygandan keyin reja SCAN dan SEARCH ga o’zgaradi — shu bilan indeks ta’sirini tasdiqlaysiz.
  • Optimizatsiyada taxmin qilmang — rejani o’qib, aniqlang.

Bu bilan SQL o’rta va yuqori darajaning katta qismini yakunladik. Keyingi darslarda window funksiyalar, CTE va boshqa ilg’or mavzular kutmoqda.

Bu dars foydali bo'ldimi?

marta ko'rildi