# SQL so'rov optimizatsiyasi — tezlashtirish

> SQL so'rovlarni qanday tezlashtirish mumkin? Indeksdan foydalanish, faqat kerakli ustunlarni tanlash, WHERE bilan erta filtrlash va keraksiz ishdan qochish.

Manba: https://learncode.uz/sql/optimizatsiya/
Sana: 2026-06-19

Kichik bazada har so'rov tez ishlaydi. Ma'lumot o'sgani sari esa ba'zi
so'rovlar sekinlashadi. **Optimizatsiya** — so'rovni bir xil natija bilan,
lekin tezroq ishlatish san'ati. Bu darsda amaliy usullarni ko'ramiz.

## 1. Indeksdan foydalaning

Eng katta ta'sir — [indeks](https://learncode.uz/sql/indeks). Tez-tez [`WHERE`](https://learncode.uz/sql/where) yoki
[`JOIN`](https://learncode.uz/sql/join) da ishlatiladigan ustunga indeks qo'ysangiz, baza butun
jadvalni o'qimay, kerakli qatorga to'g'ri o'tadi:

```sql
CREATE INDEX idx_buyurtmalar_mijoz ON buyurtmalar(mijoz_id);
```

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

```sql
SELECT nom, narx FROM mahsulotlar
WHERE turi = 'meva'
ORDER BY narx DESC;
```

## 2. Faqat kerakli ustunni tanlang

`SELECT *` hamma ustunni tortadi — ko'pincha keraksiz. Faqat kerakli ustunni
so'rang:

```sql
-- Sekinroq: hamma ustun
SELECT * FROM mahsulotlar;

-- Tezroq: faqat kerakli ikkitasi
SELECT nom, narx FROM mahsulotlar;
```

Ustun kam bo'lsa, baza kamroq ma'lumot o'qiydi va uzatadi.

## 3. WHERE bilan erta filtrlang

Ma'lumotni imkon qadar **erta** kamaytiring. Keraksiz qatorlarni
[`WHERE`](https://learncode.uz/sql/where) bilan boshidan chiqarib tashlang — shunda keyingi
amallar (guruhlash, tartiblash) kamroq qator ustida ishlaydi:

```sql
SELECT nom, narx FROM mahsulotlar
WHERE turi = 'meva';
```

## 4. Keraksiz ishdan qoching

- Kerak bo'lmasa [`ORDER BY`](https://learncode.uz/sql/order-by-limit) qo'shmang — tartiblash vaqt
  oladi.
- `DISTINCT` ni faqat zarur bo'lganda ishlating.
- Katta natijani `LIMIT` bilan cheklang, agar hammasi kerak bo'lmasa.

> **Atama**
>
> **Optimizatsiya** — so'rovning natijasini o'zgartirmasdan, uni tezroq
> bajarilishiga erishish. Asosiy g'oya: baza **kamroq ish** qilsin — kamroq
> qator o'qisin, kamroq ustun tortsin, keraksiz amal bajarmasin.

> **Boshlovchilar tez-tez yanglishadigan joy**
>
> Erta optimizatsiya qilmang. Avval **to'g'ri ishlaydigan** so'rov yozing.
> So'rov sekin bo'lsagina — qaysi qismi sekinligini o'lchab, keyin
> tezlashtiring. "Sekin" deb taxmin qilib, kodni murakkablashtirish ko'pincha
> foyda bermaydi.

## Amaliy mashq

So'rovni yaxshilang:

1. `SELECT *` bilan so'rov yozing;
2. faqat kerakli ustunlarni tanlab, qayta yozing;
3. `WHERE` shartini qo'shib, qatorlarni cheklang;
4. `EXPLAIN QUERY PLAN` bilan ikki variantni solishtiring;
5. `LIMIT` qo'shib, natijani yanada cheklang;
6. keraksiz `ORDER BY` ni olib tashlab, rejadagi tartiblash qadami
   yo'qolganini solishtiring.

Kichik bazada farq sezilmaydi — bu qoidalar qachon muhim bo'ladi?

## Qisqacha xulosa

- **Indeks** — tez-tez qidiriladigan ustunlarga qo'ying (eng katta ta'sir).
- `SELECT *` o'rniga faqat **kerakli ustunlarni** tanlang.
- `WHERE` bilan ma'lumotni **erta** kamaytiring.
- Keraksiz `ORDER BY`, `DISTINCT` dan qoching; `LIMIT` bilan cheklang.
- Avval to'g'ri ishlasin, keyin — zarur bo'lsa — tezlashtiring.

Keyingi darsda [`EXPLAIN`](https://learncode.uz/sql/explain) — baza so'rovni qanday bajarayotganini
ko'rsatadigan vositani o'rganamiz.
