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:
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:
EXPLAIN QUERY PLANbilan oddiySELECTrejasini ko’ring;WHEREqo’shib, reja o’zgarishini kuzating;narxga indeks yaratib, rejani qayta oling;JOINli so’rovning rejasini ko’ring;SCANvaSEARCHso’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
SCANdanSEARCHga 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.