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:
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:
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:
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