SQL sorğusu yavaş işləyəndə ilk növbədə çatışmayan indekslərə, sorğunun yerinə yetirilmə planına (Execution Plan) və cədvəllərin birləşmə (JOIN) məntiqinə baxmaq lazımdır. Məlumat bazasında düzgün indekslərin qurulmaması məlumatların hər dəfə sıfırdan taranmasına səbəb olur ki, bu da serverin yükünü kəskin artırır. Sorğunun strukturunu təhlil edərək lazımsız əlaqələri aradan qaldırmaq və ya şərtləri optimallaşdırmaq performansı dərhal bərpa edir. Diqqət edin ki, kiçik bir indeks dəyişikliyi belə dəqiqələrlə gözlənilən sorğuların saniyələr içində nəticə verməsini təmin edə bilər.
İndekslərin Vəziyyəti və Skan Edilmə Növləri
Sorğunun ləngiməsinin ən əsas səbəbi axtarış aparılan sütunlarda uyğun indeksin olmamasıdır. İndeks yoxdursa, verilənlər bazası bütün cədvəli sətr-sətr oxumaq məcburiyyətində qalır.
Buna texniki dildə tam cədvəl taraması (Full Table Scan) deyilir və böyük həcmli cədvəllərdə bu proses serveri tamamilə ləngidir. Tez-tez şərtlərdə istifadə etdiyiniz sütunların indeksləşdirilib-indekslənmədiyini mütləq yoxlayın.
Bu, çox vaxt unudulur, lakin düzgün indeks seçimi performans probleminin yüzdə doxsanını dərhal həll edir. Lakin həddindən artıq indeks yazmağın da yazma əməliyyatlarını ləngitdiyini unutmayın.
Axtarış şərtlərində iştirak edən sütunların indeksini yoxlayın.
Cədvəlin tam tarandığını göstərən əlamətləri təhlil edin.
Lazımsız və istifadə olunmayan indeksləri təmizləyin.
Sorğunun Yerinə Yetirilmə Planının Təhlili
Verilənlər bazasının həmin sorğunu necə icra etdiyini görmək üçün EXPLAIN və ya analoji plan alətlərindən istifadə edin. Bu planlar sorğunun hansı mərhələdə daha çox vaxt və resurs sərf etdiyini dəqiq göstərir.
Planı oxumağı öyrənmək hər bir mütəxəssis üçün həyati əhəmiyyət daşıyır. Hansı cədvəlin əvvəl oxunduğunu və birləşmələrin necə həyata keçirildiyini görmək problemin kökünü dərhal tapmağa kömək edir.
Yoxlayın ki, sorğunuz gözlənilməz böyük cədvəl birləşmələrinə səbəb olmur. Bəzən sadə bir səhv yerləşdirmə ardıcıllığı bütün sistemin məhsuldarlığını aşağı sala bilər.
Birləşmə Və Süzgəcdə Edilən Səhvlər
Çoxsaylı cədvəlləri birləşdirərkən (JOIN) şərtlərin düzgün yerləşdirilməməsi nəticə dəstinin həddindən artıq böyüməsinə səbəb olur. Süzgəcləri (WHERE şərtlərini) mümkün qədər tez tətbiq etmək vacibdir.
Əgər bütün məlumatları birləşdirib sonda süzgəcdən keç хоrirsinizsə, bazanın yaddaşı həddindən artıq yüklənəcək. Məlumat həcmini əvvəlcədən kiçiltmək sorğunun sürətini dəfələrlə artırır.
Bu yanaşma kod yazarkən diqqətdən kənarda qalır, lakin performans baxımından ən həssas nöqtələrdən biridir. Hər zaman əvvəlcə kiçik süzgəclər tətbiq edin, sonra birləşmələri icra edin.
WHEREşərtlərini mümkün qədər erkən mərhələdə yazın.Lazımsız alt sorğulardan qaçın və onları birləşmələrlə əvəz edin.
Cədvəllərin birləşmə ardıcıllığını diqqətlə nəzərdən keçirin.
Lazımsız Məlumatların Çəkilməsi Problemi
Sorğularda SELECT * ifadəsindən istifadə etmək bütün sütunların yaddaşdan oxunmasına yol açır. Ehtiyacınız olmayan sütunları sorğuya daxil etmək şəbəkə yükünü və emal vaxtını artırır.
Yalnız həmin an ekranda və ya tətbiqdə göstəriləcək konkret sütunların adlarını qeyd edin. Bu, verilənlər bazasının iş yükünü əhəmiyyətli dərəcədə azaldır.
Təcrübə göstərir ki, bu sadə vərdiş böyük layihələrdə server resurslarına qənaət etməyin ən təsirli yollarından biridir. Hər bir sorğunu dəqiq və minimal səviyyədə saxlayın.
Məlumat Tiplərinin Uyğunsuzluğu
Sorğulardakı müqayisələr zamanı fərqli məlumat tiplərinin bir-biri ilə qarşılaşdırılması indekslərin işləməməsinə səbəb ola bilər. Məsələn, mətn tipli sahə ilə rəqəm tipli dəyəri müqayisə etmək bazanı məcbur edir ki, hər sətri çevirərək yoxlasın.
Tiplərin uyğunluğunu əvvəlcədən təmin etmək və sorğu daxilində gizli çevrilmələrin qarşısını almaq lazımdır. Bu detal çox vaxt gizli qalır və səbəbi tapmaq çətin olur.
Yoxlayın ki, müqayisə olunan dəyərlər eyni məlumat tipinə malikdir. Bu, sistemin sorğunu dərhal və indeks üzrə yerinə yetirməsini təmin edəcək.
Sütun və parametr tiplərinin eyniliyini yoxlayın.
Gizli məlumat növü çevrilmələrindən qaçın.
Sorğu daxilində funksiyaları indekslənmiş sütunlara birbaşa tətbiq etməyin.
Keşləmə Və Server Resurslarının Tənzimlənməsi
Tez-tez təkrarlanan və ağır hesablamalar tələb edən sorğuların hər dəfə sıfırdan icra olunması mənasızdır. Belə hallarda nəticələri keşləmək və ya sorğu strukturunu yenidən nəzərdən keçirmək tələb olunur.
Server konfiqurasiyalarının və yaddaş ayrımlarının düzgün aparılması verilənlər bazasının ümumi sağlamlığı üçün vacibdir. Resurslar düzgün bölünmədikdə ən yaxşı yazılmış sorğu belə gecikə bilər.
Öz biliklərinizi artırmaq, real layihələrdə iştirak etmək və peşəkar inkişafınızı sürətləndirmək üçün smartedu.az-da proqramlaşdırma təlimləri elanlarına baxa bilərsiniz.