Bosh sahifa Wiki Query

Query

Query — ma’lumotlar bazasi yoki boshqa data tizimiga ma’lumotni o‘qish, filtrlash, birlashtirish, hisoblash yoki o‘zgartirish uchun yuboriladigan formal so‘rov. Relational database’da query ko‘pincha SQL orqali yoziladi.

Query faqat SELECT bilan cheklanmaydi. INSERT, UPDATE, DELETE, schema o‘zgarishi va administrative buyruqlar ham database requesti sifatida query deb atalishi mumkin.

SELECT

SELECT table yoki view’dan ma’lumot o‘qiydi.

SELECT id, title
FROM articles;

Faqat kerakli columnlarni tanlash payload va I/Oni kamaytiradi.

SELECT * schema o‘zgarganda keraksiz fieldlar, katta binary va maxfiy ma’lumotni ham olib kelishi mumkin.

FROM

FROM ma’lumot manbasini belgilaydi.

Manba:

bo‘lishi mumkin.

Alias murakkab queryda column manbasini aniq ko‘rsatadi.

FROM users AS u

WHERE

WHERE rowlarni shart bo‘yicha filtrlaydi.

WHERE status = 'active'
  AND created_at >= '2026-01-01'

Predicate index bilan mos bo‘lsa database kamroq row o‘qishi mumkin.

Column ustida function ishlatish ayrim hollarda oddiy indexdan foydalanishni cheklaydi.

Projection

Query natijasiga qaysi field va expressionlar kirishi projection.

SELECT
    price,
    quantity,
    price * quantity AS total
FROM order_items;

Alias calculated field nomini belgilaydi.

Projection database ichida hisoblanib, applicationga tayyor qiymat qaytarishi mumkin.

ORDER BY

Natijani aniq tartiblaydi.

ORDER BY created_at DESC, id DESC

Tie-breaker sifatida unique column qo‘shilsa tartib barqaror bo‘ladi.

ORDER BY bo‘lmasa rowlar kelish tartibi kafolatlanmaydi, hatto oldingi querylarda bir xil ko‘ringan bo‘lsa ham.

LIMIT va OFFSET

Natija sonini cheklaydi.

LIMIT 20 OFFSET 40

Pagination uchun sodda.

Katta offsetda database ko‘p oldingi rowni ko‘rib tashlashi mumkin.

Chuqur pagination uchun keyset yoki cursor yondashuvi samaraliroq.

GROUP BY

Rowlarni bir yoki bir nechta key bo‘yicha guruhlaydi.

SELECT category_id, COUNT(*)
FROM products
GROUP BY category_id;

Har group uchun aggregate qiymat hisoblanadi.

Projectiondagi non-aggregate fieldlar group qoidalariga mos bo‘lishi kerak.

HAVING

HAVING aggregationdan keyingi group natijalarini filtrlaydi.

HAVING COUNT(*) > 10

WHERE groupingdan oldin rowlarni, HAVING groupingdan keyin group’larni filtrlaydi.

Mumkin bo‘lgan shartni WHEREga surish qayta ishlanadigan row sonini kamaytiradi.

Aggregate function

Keng tarqalgan aggregate’lar:

  • COUNT;
  • SUM;
  • AVG;
  • MIN;
  • MAX.

COUNT(*) rowlarni sanaydi.

COUNT(column) esa NULL bo‘lmagan qiymatlarni sanashi mumkin.

Null semantikasi natijaga ta’sir qiladi.

Window function

Window function rowlarni yo‘qotmasdan ular ustida ranking va aggregation bajaradi.

ROW_NUMBER() OVER (
    PARTITION BY category_id
    ORDER BY created_at DESC
)

Qo‘llanishlar:

  • top N;
  • running total;
  • moving average;
  • oldingi row;
  • ranking.

Window partition katta bo‘lsa sort va memory sarfi oshadi.

Parameterized query

User qiymati SQL matniga string concatenation bilan qo‘shilmaydi.

WHERE email = ?

Bind parameter:

uchun ishlatiladi.

Table yoki column nomi oddiy bind parameter bilan berilmaydi; allowlist kerak.

Query plan

Database queryni bajarishdan oldin operationlar rejasini tanlaydi.

Plan ichida:

bo‘lishi mumkin.

Optimizer statistics va cost modelga tayanadi.

EXPLAIN

EXPLAIN query execution planini ko‘rsatadi.

Actual execution bilan ishlatiladigan variant:

  • real row soni;
  • vaqt;
  • loop;
  • buffer;
  • disk spill

haqida ma’lumot berishi mumkin.

Write queryni actual mode’da tekshirishda transaction va rollback ehtiyotkor ishlatiladi.

Cardinality estimate

Optimizer har operation nechta row qaytarishini taxmin qiladi.

Taxmin keskin noto‘g‘ri bo‘lsa:

  • yomon join tartibi;
  • noto‘g‘ri join algoritmi;
  • ortiqcha memory;
  • sekin nested loop

tanlanishi mumkin.

Statistics, correlated column va parameter qiymati bunga ta’sir qiladi.

Sargable predicate

Index qidiruviga mos shakldagi predicate ko‘pincha sargable deb ataladi.

Misol:

created_at >= ?

Columnni function ichiga o‘rash:

DATE(created_at) = ?

oddiy indexdan foydalanishni cheklashi mumkin.

Range chegaralari orqali qayta yozish afzal.

N+1 query

Application listni bitta query bilan olib, har row uchun yana alohida query yuborsa N+1 muammosi yuz beradi.

Masalan:

1 ta orders query
+ 100 ta user query

Join, batch lookup yoki prefetch bilan round-triplar kamaytiriladi.

Timeout

Query uchun maksimal vaqt belgilanadi.

Timeout tugashi server operationi darhol to‘xtaganini har doim anglatmaydi; cancellation signal va transaction holati tekshiriladi.

Uzun report query interactive requestdan alohida workloadga ajratilishi mumkin.

Query fingerprint

Literal qiymatlar olib tashlanib, bir xil query shakllari bitta fingerprint ostida guruhlanishi mumkin.

Bu monitoringda qaysi query turi eng ko‘p vaqt va CPU sarflayotganini ko‘rsatadi.

Maxfiy parameterlar logga yozilmaydi.

Query cancellation

Client requestni bekor qilsa database’ga cancellation signal yuboriladi.

Signal yetib borguncha query lock yoki I/Oda davom etishi mumkin.

Connection pool cancellationdan keyingi transaction holatini tekshirib, kerak bo‘lsa rollback qiladi.

Read-only replica querysi

Report query replica’da bajarilsa primary write yukidan ajraladi. Replica lag va vaqtinchalik stale natija dashboard metadata’sida hisobga olinadi.

Bog‘liq tushunchalar

SQL, SELECT, WHERE, GROUP BY, HAVING, ORDER BY, Query plan, Query optimizer, Parameterized query, Window function, Pagination