R
Rəşad QuliyevMüəllif
rashad.quliyev@example.comPostgreSQL İndeksləmə Strategiyaları və Sorğuların Optimallaşdırılması
Böyük həcmli cədvəllərdə B-Tree, GIN indekslərindən düzgün istifadə və EXPLAIN ANALYZE ilə performans diaqnostikası.
Verilənlər bazası böyüdükcə tətbiqin sürətini müəyyən edən ən kritik amil SQL sorğularının icra müddətidir. Cədvəldə 1000 sətir olanda fərq hiss olunmur, lakin qeydlərin sayı 1 milyona çatdıqda optimizasiya olunmamış tək bir 'SELECT' bütün serveri kilitləyə bilər.
Bu məqalədə PostgreSQL mühitində indekslərin necə işlədiyini və hansı hallarda tətbiq edilməli olduğunu dərindən araşdırırıq.
📌 1. İndeks Nədir və Necə İşləyir?
İndeks kitabın sonundakı əlifba sırası ilə düzülmüş lüğət kimidir. Əgər indeks yoxdursa, PostgreSQL axtardığınız sətri tapmaq üçün cədvəlin bütün bloklarını başdan-ayağa oxumalıdır (buna Seq Scan - Sequential Scan deyilir). İndeks olduqda isə baza birbaşa həmin sətrin disk ünvanına (TID) tullanır (Index Scan).
📌 2. PostgreSQL İndeks Növləri:
- B-Tree (Default): Bərabərlik ('='), aralıq ('>', '<', 'BETWEEN') və sıralama ('ORDER BY') əməliyyatları üçün mükəmməldir. Bloqumuzun 'createdAt', 'slug' və 'email' sahələrində məhz B-Tree indeksləri tətbiq olunur.
- GIN (Generalized Inverted Index): Mətn axtarışı (Full-Text Search), massivlər (Arrays) və JSONB sənədləri üçün idealdır. Məsələn, JSON daxilindəki açarları axtarmaq üçün GIN əvəzolunmazdır.
- Hash İndeksi: Yalnız bərabərlik yoxlamalarında işləyir, lakin B-Tree qədər elastik deyil.
📌 3. Çoxlu İndeksin Təhlükələri
Hər bir sütuna kor-koranə indeks qoymaq böyük səhvdir!
1. İndekslər RAM və Disk sahəsi tutur.
2. Hər 'INSERT', 'UPDATE' və 'DELETE' zamanı PostgreSQL təkcə cədvəli yox, həm də mövcud bütün indeks ağaclarını yenidən balanslaşdırmalıdır. Nəticədə yazma əməliyyatları kəskin yavaşlayır.
Məsləhət: 'EXPLAIN ANALYZE SELECT ...' komandası ilə sorğunun icra planını yoxlayın. Əgər 'Seq Scan' görürsünüzsə və sətir sayı çoxdursa, yalnız o zaman indeks əlavə edin.
←Bütün yazılara qayıtKateqoriya: Database