Indekslar va EXPLAIN: so'rovni tezlashtirish
lockЭтот контент пока недоступен на русском языкеДоступные языки: O'zbek
terminal
Практические лаборатории
Интерактивные задания, привязанные к этому уроку — выполните в реальной среде Kubernetes и проверьте результат.
terminal
PostgreSQL: birinchi indeks va EXPLAIN (Seq Scan -> Index Scan)
Osonbolt+20 XP
hodisa jadvalida 50 mingdan ortiq qator bor. kod = 599 bo'yicha qidiruv butun jadvalni skanerlayapti. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa Avval rejani ko'ring: explain select from hodisa where kod = 599 — Seq Scan ekaniga ishonch hosil qiling kod ustuniga idx hodisa kod nomli indeks yarating analyze hodisa; ni bajaring (statistikasiz planner eski ma'lumot bilan qaror qiladi) Keyin UCH xil shartning rejasini solishtiring: kod = 599 (1 qator), kod = 200 (uchdan bir qator), kod = 200 (barcha qatorlar) Muvaffaqiyat mezoni (jonli) Indeks katalogda mavjud; kod = 599 — Index Scan (aynan idx hodisa kod); kod = 200 — Bitmap Heap Scan; kod = 200 — Seq Scan
terminal
PostgreSQL: ko'p ustunli indeks va ustunlar tartibi
Osonbolt+20 XP
Eng ko'p ishlatiladigan so'rov ikki ustun bo'yicha filtrlaydi: xizmat va daraja. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa (xizmat, daraja) ustunlari bo'yicha idx hodisa xd nomli KO'P USTUNLI indeks yarating (aynan shu tartibda) analyze hodisa; ⚠Ikki alohida indeks emas — BITTA ko'p ustunli indeks. Muvaffaqiyat mezoni (jonli) Indeks aynan (xizmat, daraja) tartibida; ikki ustunli so'rov aynan shu indeksdan foydalanadi; xizmat bo'yicha yolg'iz so'rov ham undan foydalanadi
terminal
PostgreSQL: noyob indeks (unique index) va constraint farqi
Osonbolt+20 XP
Har xizmat uchun bitta faol sozlama qatori bo'lishi kerak — takrorlanish baza darajasida to'silsin. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa sozlama jadvalini yarating: id PK, xizmat text NOT NULL, qiymat text xizmat ustuniga idx sozlama xizmat nomli UNIQUE indeks yarating (create unique index bilan) Muvaffaqiyat mezoni (jonli) Indeks UNIQUE; takroriy xizmat qiymati RAD etiladi; qidiruv shu indeksdan foydalanadi
terminal
PostgreSQL: qisman indeks (partial index)
Murakkabbolt+30 XP
Jurnalda 50 mingdan ortiq qator bor, lekin so'rovlar deyarli DOIM faqat fatal darajali hodisalarni qidiradi. Butun ustunga indeks qo'yish isrof. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa FAQAT daraja = 'fatal' qatorlar uchun vaqt ustuni bo'yicha idx hodisa fatal nomli QISMAN indeks yarating (where sharti bilan) analyze hodisa; Muvaffaqiyat mezoni (jonli) Indeks WHERE sharti bilan yaratilgan; fatal bo'yicha so'rov aynan shu indeksdan foydalanadi; indeks butun jadvaldan sezilarli KICHIK
terminal
PostgreSQL: ifoda bo'yicha indeks (functional index)
Murakkabbolt+30 XP
Email katta-kichik harf farqisiz qidirilyapti: where lower(email) = '...'. Oddiy indeks bunday so'rovga YORDAM BERMAYDI. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa lower(email) ifodasi bo'yicha idx hodisa email lower nomli indeks yarating analyze hodisa; ⚠Oddiy on hodisa(email) emas — aynan IFODA bo'yicha. Muvaffaqiyat mezoni (jonli) Indeks ifoda bo'yicha yaratilgan; lower(email) = ... so'rovi shu indeksdan foydalanadi
terminal
PostgreSQL: qamrab oluvchi indeks va Index Only Scan (INCLUDE)
Murakkabbolt+30 XP
So'rov faqat ikki ustunni qaytaradi. Agar indeksda ikkala qiymat ham bo'lsa, PostgreSQL jadvalga UMUMAN murojaat qilmasligi mumkin. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa xizmat bo'yicha indeks yarating va kod ustunini INCLUDE bilan qo'shing: idx hodisa cover nomi bilan analyze hodisa; ⚠Ikki ustunli oddiy indeks emas — include (kod) sintaksisi bilan. Muvaffaqiyat mezoni (jonli) Indeks INCLUDE bilan yaratilgan; select kod ... where xizmat = ... so'rovi Index Only Scan rejasidan foydalanadi
terminal
PostgreSQL: indeks ISHLAMAYDIGAN holatlar
Murakkabbolt+30 XP
Indeks bor, lekin so'rov baribir sekin. Sabab — so'rov yozilish USULI indeksdan foydalanishga imkon bermaydi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa SEED kod va email ustunlariga indeks yaratgan. /root/db/javob.txt fayliga UCH qatorli javob yozing — har qatorda faqat SEQ yoki IDX so'zi (katta harfda), quyidagi so'rovlar uchun tartib bilan: select from hodisa where kod::text = '599' select from hodisa where email like '%example.uz' select from hodisa where kod = 599 ⚠Javobni explain bilan TEKSHIRIB yozing — taxmin qilmang. Muvaffaqiyat mezoni (jonli) Uch qatorli javob rejalarga mos: birinchi ikkitasi SEQ, uchinchisi IDX
terminal
PostgreSQL: tartiblash va TOP-N uchun indeks (ORDER BY ... LIMIT)
Murakkabbolt+30 XP
Panel har 10 soniyada 'oxirgi 10 hodisa' so'rovini yuboradi. Hozir bu 50 ming qatorni saralashni talab qilyapti. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa vaqt ustuni bo'yicha KAMAYISH tartibidagi idx hodisa vaqt indeksini yarating (vaqt desc) analyze hodisa; Muvaffaqiyat mezoni (jonli) Indeks DESC tartibda; order by vaqt desc limit 10 so'rovi shu indeksdan foydalanadi va rejada SARALASH (Sort) tuguni QOLMAYDI
terminal
PostgreSQL: ortiqcha indekslarni topish va o'chirish
Murakkabbolt+30 XP
Jadvalga vaqt o'tib to'rtta indeks qo'shilgan. Ulardan ikkitasi ORTIQCHA: boshqa indeksning prefiksi bilan bir xil ish qiladi. Har ortiqcha indeks yozish tezligini pasaytiradi va disk yeydi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa SEED to'rt indeks yaratgan: idx a — (xizmat) idx b — (xizmat, daraja) idx c — (kod) idx d — (kod) (aynan takror) ORTIQCHA ikkitasini aniqlab O'CHIRING (drop index), qolgan ikkitasi qolsin. ⚠idx a idx b ning prefiksi; idx d esa idx c ning aynan nusxasi. Muvaffaqiyat mezoni (jonli) Jadvalda faqat 2 ta idx indeks qoladi: idx b va idx c; xizmat va kod bo'yicha qidiruv hamon indeksdan foydalanadi
terminal
PostgreSQL: sekin so'rovni tashxislab tezlashtirish (C temasi yakuni)
Murakkabbolt+30 XP
Panel so'rovi sekin ishlayapti: 'oxirgi 20 error hodisasi api xizmati bo'yicha'. Jadvalda indeks umuman yo'q. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. Vazifa So'rov: select from hodisa where xizmat = 'api' and daraja = 'error' order by vaqt desc limit 20 Uni tezlashtiradigan BITTA indeks yarating — nomi idx hodisa panel analyze hodisa; ⚠Indeks HAM filtrni, HAM tartiblashni qoplashi kerak: ustunlar tartibini to'g'ri tanlang (tenglik ustunlari oldin, tartiblash ustuni oxirida). Muvaffaqiyat mezoni (jonli) Bitta indeks; so'rov shu indeksdan foydalanadi; rejada Sort tuguni YO'Q (tartiblash indeksdan olinadi)
