SQL index nədir? necə işləyir?
Salam dostlar, bu gün biz bir çoxlarımızın bilibdə işlətmədiyi, işlədibsə də yalnış işlətdiyi 🙃, varlığından belə xəbəri olmayan index -in nə olduğunu öyrənəcəyik. 🙂
Əgər verilənlər bazası ilə işləyəcəksinizsə indexləmə sözünü çox eşidəcəksiniz. Bəs nədir axı bu hamının dilindən düşməyən indexləmə? İndexləmə deyəndə ağlımıza nə gəlməlidir? Beynimizdə necə təsəvvür etməliyik?
Əslində indexləmə işini biz öz gündəlik həyatımızda istifadə edirik. Təsəvvür edin qarşınızda bir hekayə kitabı var. Mən sizdən həmin kitabda baş qəhrəmanın yaralandığı hissəsini oxu desəm? Siz nə edəcəksiniz? Məcbur kitabın bütün səhifələrinə baxacaqsınız. Hekayədə mən istədiyim hissəni oxumaq üçün. Fərz edək ki, baxdınız və oxudunuz. Bu sizin 10 dəqiqənizi aldi.
İndi isə mən yenə sizdən həmin kitabda baş qəhrəmanın yaralandığı hissəsini oxu desəm? Amma bu dəfə həmin hissə kitabın 15-ci səhifəsindədir desəm? Siz nə edəcəksiniz? Heç fikirləşmədən 15-ci səhifəni açıb, həmin hissəni oxuyacaqsınız. Və bu sizin heç 1 dəqiqənizi də almayacaq.
Bunun kimi gündəlik həyatımızda çox şeyləri nümunə göstərmək olar. İndexləmə də bizə əlimizdəki məlumatı daha surətli tapmağa imkan verir.
Bəs index-i necə yaradırlar?🤔
CREATE INDEX index_adı ON table_adı (sütun1, sütun2, ...);
Verilənlər bazasında hər yenidən yaratma, dəyişiklik edilmə və silmə hadisələrindən sonra index yenidən yaradıldığina görə hər gördüyümüz sütuna index vermək olmaz. İstifadə olunmayan sütunları indexləmək və həddən artıq indexləmə performansı aşağı sala bilər.
Bəs bu indexləmə necə işləyir? 🤔
İndex-lərin işləmə alqoritmi proqramlaşdırmada çox istifadə olunan və verilənlər bazasının önəmli məsələlərindən biri olan ağac alqoritmidir.
Tree adlandırılan bu alqoritmin bir çox növü olmasına baxmayaraq biz sql serverin istifadə elədiyi B-Tree (Balanced Tree –Balanslı Ağac)-dan danışacam.
Tree alqoritmlərində ən başda Root yəni kök olur. Root-un altında isə normalda bir və ya birdən çox Intermediate level (Orta səviyyə) dediyimiz hissə olur. Əgər Intermediate level dediyimiz hissənin altında yeni bir hissə yoxdursa, o zaman Intermediate level dediyimiz hissəyə Leaf (yarpaq) deyilir.
Root-leaf əlaqəsi proqramlaşdırmada parent-child əlaqəsinə bənzəyir.
İndi isə gəlin B-Tree alqoritminin məntiqini anlamaq üçün bir nümunəyə baxaq. 1-dən 200-ə qədər nömrələnmiş olan qutuların içində 150 nömrəli qutunu tapmağa çalışaq. Əgər indexləmədən istifadə eləməsək 1-dən 150-yə qədər bütün qutulara baxmağa məcburuq. Amma aşağıdaki şəkildəki kimi qutuları B-Tree olaraq sıralasaq axtardığımızı daha tez tapa bilərik.
Şəkildəki kimi 150 nömrəli qutunu 28 dəfə oxumaqla tapırıq. Əvvəlcə 150 dəfə baxmaq lazım idisə B-Tree ilə 28 dəfə baxmaq lazım gələcək. Beləcə həm yaddaşı cox yükləmirik həm də surətli şəkildə istədiyimizi tapırıq.
İndex növləri
SQL-də indexlərin aşagıdakı növləri vardır.
İçində ən önəmli olan Clustered Index və Non-Clustered Index haqda novbəti məqalələrdə ətraflı danışacayıq. Bizi izləməkdə davam edin 🙂.