SQL indeksləri Müsahibə Sualları

Budur SQL indeksləri Müsahibə Sualları və ya Verilənlər Bazasının indeksləşdirilməsi müsahibə sualları

1. İndeks nədir?

İndeks, cədvəlin bir və ya daha çox sütununda yaradılan bir məlumat quruluşudur. Əksər hallarda, indekslər B ağacı kimi qurulmuşdur. İndeks bir cədvəlin sütununda yaradıldıqda, əslində sütunlu bir axtarış cədvəli və bu sütunun olduğu bir satırın həqiqətən saxlandığı yaddaş ünvanına bir göstərici yaradır. Buna görə WHERE bəndində sütunu olan bir cədvəl soruşduqda, ayrıştırıcı əvvəlcə bu sütunun indeksin bir hissəsi olub olmadığını və bunun üçün indeks axtarış cədvəlinin olub olmadığını yoxlayır. Varsa, qeydin saxlandığı yaddaş adresini yoxlayır. Sonra birbaşa həmin yaddaş ünvanına atlanır və nəticəni istifadəçiyə qaytarır. Buna görə indeks taraması və ya bir sütunda indeks varsa, məlumatları daha sürətli alır.

2. İndeks hansı məlumat strukturudur?

Əksər hallarda, indeksləri saxlamaq üçün B-Tree məlumat quruluşundan istifadə olunur. Bunun səbəbi B ağaclarının vaxt səmərəliliyidir. Başqa sözlə, B ağacları logaritmik vaxtda keçilir, axtarılır, yerləşdirilir, silinir və yenilənir. Bundan əlavə, B-Tree məlumatları həmişə çeşidlənir və saxlanılır. Beləliklə, məlumatların zamanın məlum hissəsində axtarışını və daxil edilməsini təmin edir. B ağaclarında saxlanılan məlumat dəyərləri balanslaşdırılmışdır - müəyyən bir qovşaqdan kiçik olan bütün dəyərlər qovşağın solunda və qovşaq dəyərindən böyük dəyərlər qovşağın sağında tapılır. Bu səbəbdən B-ağac indekslərində hər hansı bir dəyəri və ya qeydləri axtarmaq asandır.

Bununla birlikdə, RDBMS, indeks üçün hansı məlumat strukturunun istifadə edilməli olduğunu müəyyənləşdirir. Müəyyən RDBM-də indeks üçün hansı məlumat strukturunun istifadə edilməli olduğunu deyə bilərik.

3. Bir hash masa indeksi necə işləyir?

Hash tablo indeksində sütunda istifadə olunan hash funksiyasına əsasən sütunlarda indeks yaradılacaqdır. Yəni indeksin yaradılacağı sütunda hash funksiyası tətbiq ediləcək və nəticədə qeydin saxlandığı yer olacaqdır. Beləliklə, bu metodda bütün qeydlər yaddaşa səpələnəcəkdir.

Məsələn, EMPLOYEES cədvəlinin PHONE_NUMBER sütununda hash indeksi yaratdığımızı düşünün. Bu hash funksiyası hər hansı bir kompleks funksiyaya hər hansı bir sadə funksiya olsun. Güman edək ki, bu halda xaş funksiyası PHONE_NUMBER-dəki bütün rəqəmlərin cəminin 1000-ə vurulmasıdır. Sonra 546.897.231 saylı hər hansı bir telefon nömrəsini axtarmalıyıqsa, onu 45000 yerində əldə edəcəyik. Buna görə göstərici həmin yerə gedəcək və tələb olunan qeyd məlumatlarını alacaq. Dərhal növbəti telefon nömrəsi detallarını görməliyiksə, əvvəlki telefon nömrəsindən çox uzaq olan 46000 yerində olacaq.

4. Haş indeksinin çatışmazlıqları hansılardır?

Hash indeksləri, indeksin yaradılması lazım olan sütunda bir hash funksiyası yaratmaqla yaradılır. Beləliklə, hər bir sütunun ona ayrılmış fərqli bitişik olmayan yaddaş yerləri olacaqdır. Buna görə, 'az' və ya 'böyük' kimi şərtlərlə bitişik qeydləri axtarmalıyıqsa, hash indeksi bütün qeydləri bir çəkidə əldə edə bilməyəcəkdir. Bütün qeydləri əldə etmək üçün müxtəlif yerlərdə qeydləri axtarmaq lazımdır. Beləliklə, bu cür axtarışlar üçün səmərəli deyil. Yaxşı olar ki, açar dəyər cütlərini axtaraq. Yəni WHERE bəndində '=' şərti ilə sorğu daha yaxşı performansa sahib olacaqdır.

5. İndekslərin digər növləri hansılardır?

6. Verilənlər bazası indeksinin içərisində dəqiq nə var?

Bir cədvəldəki bir sütunda və ya sütunların birləşməsində bir indeks yaradıldıqda, indeksin yaradıldığı sütunlar və cədvəlin bütün qeydlərinin saxlandığı yaddaş yerinə bir göstərici ünvanı ilə başqa bir indeks axtarış cədvəli yaradılır. Axtarış cədvəlində bütün qeyd məlumatları olmayacaqdır.

7. Verilənlər bazası indeksdən nə vaxt istifadə edəcəyini necə bilir?

'WHERE COLUMN_NAME =' XYZ 'şərti ilə bir sorğu işlədikdə, o zaman Verilənlər bazası bu COLUMN_NAME -də indeks olub olmadığını yoxlayacaq. Bu sütunda indeks varsa, sütunun seçiciliyini yoxlayacaq və indeksin istifadə edilməli olub -olmamasına qərar verəcəkdir. Sütunun seçiciliyi 0.33 -dən çox olarsa, məlumatları almaq üçün indeks istifadə ediləcək.

8. Verilənlər bazasını sorğuda indeks istifadə etməyə məcbur edə bilərsinizmi?

Bəli, Oracle-da biz HINTS istifadə edərək verilənlər bazasını indeksdən istifadə etməyə məcbur edə bilərik. Bu ipuçları indeksdən istifadə etmək üçün icra yolunu yönləndirəcəkdir.

9. SQL-də indeks necə yaradılır?

İndeksin yaradılması üçün ümumi sintaksis:

CREATE INDEX index_name
ON TABLE_NAME (COLUMN_NAME);

CREATE INDEX idx_phone
ON EMPLOYEES (PHONE_NUMBER);

 10. SQL-də çox sütunlu bir indeks necə yaradılır:

Sütunların birləşməsində indeks yarada bilərik. Çox sütunlu indeks yaratmaq üçün ümumi sintaksis:

CREATE INDEX index_name
ON TABLE_NAME (COLUMN_NAME1, COLUMN_NAME2,.. COLUMN_NAMEN);

CREATE INDEX idx_emp_name
ON EMPLOYEES (FIRST_NAME, LAST_NAME);

 11. Verilənlər bazası indeksi üçün yaxşı bir bənzətmə nədir?

İndeksin çox yaxşı bir real vaxt nümunəsi kitabdakı indeks və kitabxanadakı kataloqlardır. Müəyyən bir mövzuda axtarış / oxumaq istədikdə kitabın indeksinə baxırıq və bütün kitabı bu mövzu üçün taramaqdansa, həmin səhifəyə keçirik. İndeksdə axtarış aparmaq və sonra həmin səhifəni nəzərdən keçirmək daha səmərəlidir.

12. Bitmap indeksi nədir?

Bitmap göstəriciləri, sütun üçün məhdud sayda dəyərlə qeydləri əldə etməkdə çox güclüdür. Bu metodda unikal dəyərləri az olan sütunlar üçün göstəricilər bit şəklində istifadə olunur. Nümunədən istifadə edərək bu metod haqqında bir-bir anlamağa çalışaq.

Yuxarıda göstərilən nümunədə CƏND sütununa diqqət yetirsək, yalnız iki dəyərə sahib ola bilər - Kişi və ya Qadın. Bütün TƏLƏBƏ cədvəli ilə müqayisədə bunlar unikal dəyər deyildir. Eynilə, kurs üçün cəmi dörd semestrimiz olduğunu söylədikdən sonra yalnız dörd dəyərə sahib ola bilərik - sem1, sem2, sem3 və sem4. Bu tip sütunlara daha az unikal dəyər sütunu və ya daha az kardinallığı olan sütun deyilir. Bu sütunların daha az dəyərli olmasına baxmayaraq, ən çox sorğu olunur.

Bitlər - hamının bildiyi kimi ən kiçik məlumat təqdimatı vahidi. Dəyər olaraq 0 ya da 1 ola bilər. İndi bu bitləri daha az unikal dəyər sütunlarını təmsil etmək üçün istifadə etsək nə olar? Bəs necə? Daha az istifadə olunan sütunları bit şəklində saxlama üsuluna bitmap indeksləri deyilir.
Bu üsul çox böyük ölçülərdə istifadə olunur masaları daha az unikal dəyər sütunlarına malikdir və müxtəlif axtarış sorğuları ilə əldə edilən vaxtdır. Bu üsulda əldə edəcəyik

  • Daha az unikal dəyər sütunlarının hər biri üçün cədvəldəki sətir sayı qədər bit. Məsələn, TƏLƏBƏ cədvəlində 10K qeyd varsa, onda hər sətir üçün bir bit - 10K bitimiz olacaq.
  • Sütunda yaradılan bitmap indekslərinin sayı sütundakı fərqli dəyərlərin sayına bərabər olacaqdır. Məsələn, CİNS sütunu üçün iki bitmap göstəricisi yaradılacaq - biri kişi, biri qadın, semestr sütunu üçün dörd bitmap göstəricisi yaradılacaq - 1, 2, 3 və 4.
  • Sətir üçün sütunda hər hansı bir uyğun dəyərimiz varsa, o sətir biti '1', əks halda '0' olacaqdır. Yəni Cins sütunu üçün 2 bitmap göstəricisi olacaq - biri kişi, biri qadın. 'Kişi' bit xəritə indeksi üçün bit dəyəri 1 olacaq, əgər bu cərgədə 'M', else '0' cinsi varsa.

TƏLƏBƏ cədvəlinin nümunəsində yalnız dörd qeydin olduğunu və aşağıdakı kimi dəyərlərə sahib olduğunu düşünün.

  • 1-ci qaydaya görə cədvəldə dörd sıra olacaq və bu səbəbdən bitlərimiz olacaq - hər sıra üçün bir bit

 

  • CİNSİYƏ sütununun yalnız iki dəyəri var - 'M' və 'F'. Bu səbəbdən iki bitmap indeksimiz olacaq - biri 'M' üçün, digəri 'F' üçün.
  • İndi Gender sütunu üçün bitmap indeksi aşağıdakı kimidir. Burada 'M' bitmap indeksi '1000' dəyərinə malikdir, ilk sətrin cinsi 'M' olduğunu, satırların qalan hissəsinin 'M' kimi cinsi olmadığını ifadə edir. Eynilə bitmap indeksi 'F' birinci sətrin 'F' olmadığını və istirahət olduğunu göstərir bütün satırların 'F' cinsi var.

Eynilə Semestr üçün bitmap indeksi belə ola bilər:

 

Tutaq ki, ikinci semestrdə olan tələbə qızları tapmalıyıq. Burada bu sorğu, hər ikisinin daha az unikal dəyər sütununa sahib olduğu qeydləri süzmək üçün iki sütundan istifadə edir.

SELECT * FROM STUDENT WHERE GENDER = ‘F’ AND SEMESTER =2;

Sorğu, bu sütunların hər ikisi üçün bitmap indeksini axtaracaq və nəticənin həqiqi ünvanını almaq üçün bu indekslərdə məntiqi 'VƏ' əməliyyatı həyata keçirəcəkdir.

Düzgün olub olmadığını yoxlamaq üçün masaya baxın. Bəli, düzgün sıra ilə nəticələndi. Beləliklə, DBMS fayldakı üçüncü sıraya keçir və istifadəçi üçün nəticəni göstərir.
Burada bitmap indeksini almaq və nəticəni əldə etmək üçün məntiqi 'AND' əməliyyatını yerinə yetirmək nisbətən daha sürətli olur. Beləliklə, bu saxlama metodu bu cür məlumatlar üçün faydalıdır.

Yazını cədvəldən silməyimiz lazım olsa, müvəqqəti bir silmək indeksi yaradılacaq. Sonra məlumatları cədvəldən çıxarmaq üçün filtr sütunlarında və müvəqqəti indeksdə məntiqi 'VƏ' əməliyyatı yerinə yetirəcəkdir.
Tutaq ki, 4-cü semestrdən qadın tələbəni silmək məcburiyyətindəyik. Sonra bu qeydin silinməsi ilə əlaqəli addımlar aşağıdakı kimidir.

SELECT * FROM STUDENT WHERE GENDER = ‘F’ AND SEMESTER =4;

 

13. Bit xəritəsi göstəricisi necə yaradılır?

Bit xəritə indeksi yaratmaq üçün sintaksis aşağıdakı kimidir:

CREATE BITMAP INDEX index_name
ON table_name (column_name);

Misal üçün,
CREATE BITMAP INDEX idx_gender
ON STUDENT (GENDER);

 14. Bitmap İndeksinin üstünlükləri və dezavantajları hansılardır?

Bitmap göstəricilərinin üstünlükləri:

Daha əvvəl də gördüyümüz kimi, bu metod daha az kardinal sütun olduqda və bu sütunlarda ən çox sorğuda istifadə edildikdə qeydlərin daha sürətli alınmasına kömək edir. Bu üsul çox böyük masamız olsa da səmərəlidir.

  • Bu metod, sütunların daxiletmə / yeniləmə / silmə əməliyyatlarında ən az iştirak etdiyi zaman daha səmərəlidir.
  • Yuxarıdakı nümunələrdə gördüyümüz kimi sorğunu açmaq üçün birdən çox bitmap indeksini birləşdirməyə imkan verir

Bitmap göstəricilərinin dezavantajları:

  • Kiçik masalar üçün uyğun deyillər. Kiçik cədvəllərdə DBMS bitmap indeksindən istifadə etmək əvəzinə tam cədvəl taramasından istifadə etməyə məcbur edəcəkdir.
  • Fərqli istifadəçilər tərəfindən masada birdən çox əlavə/yeniləmə/silmə olduqda, bu, masalarda tıxanmaya səbəb ola bilər. Tamaşanı ifa etmək üçün vaxt lazımdır DML əməliyyat və sonra bitmap indeksini yeniləmək üçün. Buna görə fərqli istifadəçilərdən birdən çox DML əməliyyatı olduqda, əməliyyatı tez bir zamanda həyata keçirə bilməyəcək və çıxılmaz vəziyyətə düşə bilər.
  • Çox sayda qeyd olduqda, bu bitmap indekslərini qorumaq üçün bir xərc var. Hər dəfə yeni bir qeyd daxil edildikdə, bitmap indeksini dəyişdirməliyik, bu yorucu və vaxt aparan bir şeydir.

15. B-Tree və Bitmap Index arasındakı fərq nədir?

B Tree metodunda hər kök yalnız iki qovşaqa budaqlanır və hər vasitəçi qovşaqda da məlumatlar olacaqdır. Və yarpaq nodu ən aşağı səviyyəli məlumatlara sahib olacaqdır. Bununla birlikdə, bu metodda da qeydlər sıralanacaqdır. Bütün vasitəçi qovşaqların da qeydləri olduğundan, məlumat üçün yarpaq düyününə qədər keçməyi azaldır. Sadə bir B ağacı aşağıdakı kimi təmsil edilə bilər:

Bitmap göstəriciləri, sütun üçün məhdud sayda dəyər olan qeydləri əldə etməkdə çox güclüdür. Bu metodda, unikal dəyərləri daha az olan sütunlar üçün göstəricilər bit şəklində istifadə olunur.

16. Funksiyaya əsaslanan indeks nədir?

Adı 'steven' olan işçi məlumatlarını tapmaq üçün bir sorğunu nəzərdən keçirin. Burada ad kiçik hərflə verilir. İŞÇİLƏR cədvəlinin adı initcap formatında saxlanılır. Bu səbəbdən EMPLOYEES içindəki FIRST_NAME-nı kiçik hərfə çevirməliyik.

SELECT * FROM EMPLOYEES WHERE LOWER (FIRST_NAME) = ‘steven’;

Ancaq təsəvvür edin ki, FIRST_NAME sütununda yaradılan indeksimiz var. Sonra yuxarıdakı sorğu, qeydləri axtarmaq üçün FIRST_NAME-da yaradılan indeksdən istifadə etməyəcəkdir. İndeksdən istifadə etmək üçün ehtiyacımız varsa, LOWER () funksiyası ilə birlikdə indeks yaratmalıyıq. Sütunlardakı bu cür göstəricilər funksiyaya əsaslanan indekslər adlanır.
CREATE INDEX idx_lwr_firstname ON EMPLOYEES (LOWER (FIRST_NAME));

17. İndeks mütəşəkkil cədvəli nədir?

Cədvəl sütunlarında bir indeks yaratdığımız zaman arxa planda baş verənlər, bu sütun məlumatları ilə başqa bir cədvəlin yaradılmasıdır (bütün qeydlər üçün) və ünvan yerinin göstəricisi saxlanılır. Beləliklə, WHERE bəndində bu sütunu istifadə edərək bir sorğu atdığımızda, bu indeks cədvəli ünvan yeri üçün axtarılacaq və göstərici birbaşa bu ünvan yerinə sıçrayacaq və nəticəni qaytaracaqdır.
Ümumiyyətlə, cədvəlin əsas açarında yaradılmış bir indeks olacaqdır. Ancaq kiçik bir cədvəl olub olmadığını təsəvvür edin və qalan sütunlarda da indeks yaradırıq. Nə olacaq? Lazımsız olaraq bu sütun qeydləri indeks cədvəlində də saxlanılır. Bu yaddaş itkisidir. Beləliklə, oracle nə edir, bütün cədvəlin özünü indeks olaraq saxlayır və əsas açarına əsasən sıralayır. Başqa sözlə, sütun dəyərlərini və ünvan yerini təkcə indeks cədvəlində saxlamaq əvəzinə bütün cədvəl qeydləri birincil açarına əsasən indeks cədvəlində saxlanılır. Bu cür cədvəllər İndeks Təşkil olunmuş cədvəl (IOT) kimi tanınır.

Aşağıda dizin cədvəlinin necə yaradılacağına dair bir nümunə verilmişdir.

CREATE TABLE iot_example (
		NAME VARCHAR (50),
		ADDRESS VARCHAR (70), 
		CONSTRAINT PK_NAME PRIMARY KEY (NAME))
	ORGANIZATION INDEX;

18. Daha yaxşı performans üçün SQL İndekslərini tənzimləmək üçün bəzi tövsiyələr hansılardır?

Masadakı sorğunun performansını yaxşılaşdırmaq üçün masalarda indekslər yaradılır. İndekslər ümumiyyətlə sorğuların təhlili ilə yaradılır. Yəni WHERE bəndində ən çox istifadə olunan sütunları, cədvəldəki qeydlərin sayını, sütun dəyərlərinin bənzərsizliyini, sütunun seçiciliyini və s. Yoxlayır, lakin sorğunun daha yaxşı nəticə verməsi üçün cədvəldə indekslər yaradarkən az sayda göstəriş var. .

  • Çox sayda indeks istifadə etməyin: -İndeks yaratdığımızda, sütun dəyərlərini və göstəricini ünvan yerinə saxlamaq üçün DB tərəfindən başqa bir axtarış cədvəli yaradılacaqdır. Beləliklə çox sayda indeks yaratsaq, bu məlumatları saxlamaq üçün çox yer lazımdır. Bundan əlavə, məlumatların təkrarlığıdır. Bunun xaricində, qeydləri YENİLƏYƏN və ya SİLMƏYƏ çalışsaq, bütün bu indeks cədvəllərini də yeniləməliyik. İndeks sayı artdıqca, bu indeks cədvəllərinin yenilənməsi də vaxt aparan artar. Beləliklə sorğunun performansı aşağı düşür. Buna görə həqiqətən tələb olunan indeks yaradın. Cədvəldəki bütün istənməyən indeksləri silin.
  • İndeksə dəfələrlə yenilənən sütunları daxil etməməyə çalışın: - Sütunda tez-tez yenilənən indeks yaratsaq, indeks cədvəlini də yeniləməliyik. Bu əlavə bir tapşırıq olacaq və sorğu yeniləməsinin vaxtını əlavə edəcəkdir. Yəni sütunu yeniləmək üçün tələb olunan vaxtı artıracaqdır. Bu səbəbdən tez-tez yenilənən sütunlarda indeksin olması təqdir edilmir.
  • Xarici açar sütun (lar) da indekslər yaratmaq performansı artıra bilər: - Hər dəfə bir çox cədvəllə sorğu yazdığımızda, bir cədvəlin əsas düyməsini başqa cədvəldəki xarici açarla birləşdiririk (ana-uşaq xəritəsi). Bununla birlikdə, əsas açar sütununda standart indeksimiz olacaq. Xarici açar sütunda indeksin olması sorğunun performansını yaxşılaşdıracaqdır. Başqa sözlə, işçilər cədvəlində DEPARTMENT_ID xarici açardır deyin. Bu İŞÇİLƏR cədvəli çox böyük bir cədvəldir və bu cədvəlin DEPARTMENT_ID ilə DEPARTMENT_ID departamentlərinin DEPARTMENT_ID ilə birləşməsi çox vaxt aparacaqdır. ƏMƏKDAŞLAR cədvəlinin DEPARTMENT_ID indeksi varsa, bu performansı artıracaq.
  • SQL sorğularınızın predikatlarında dəfələrlə istifadə olunan sütunlar üçün indekslər yaradın: - WHERE bəndində bəzi sütunlar dəfələrlə istifadə olunursa, bu cür sütunlarda indeks yaratmaq daha yaxşıdır. Sorğunun performansını artıracaqdır.
  • Üst-üstə düşən indekslərdən qurtulun: - Sütunların birləşməsində indekslər yaradıla bilər - birdən çox sütun. Birdən çox sütunda indeksimiz varsa, sorğuda əvvəlcə ilk sütunu yoxlayır və həmin indeksdən istifadə edir. WHERE bəndində bütün sütunlar varsa, standart olaraq o indeks istifadə ediləcəkdir. Yalnız ilk sütunu varsa, indeks də istifadə ediləcəkdir. Fərz edək ki, ilk sütunu ilə eyni sütunu istifadə edən birdən çox indeksimiz var, sorğu indeks seçmək üçün qarışıq olacaq. Tamaşada problem yaradacaq. Buna görə üst-üstə düşən indeks yaratmayın.
  • Cədvələ çoxlu miqdarda məlumat yükləyərkən bir indeksi silməyi düşünün: - Çox sayda məlumat yüklənərkən verilənlər bazası avtomatik olaraq indeks cədvəlini / s-lərini yeniləyir (masada neçə indeks yaradıldığına görə). Beləliklə, çoxlu miqdarda məlumat yükləyiriksə, yüklənmə müddəti həqiqi cədvəl məlumatlarını yükləmək üçün çəkilən vaxta və bütün indeks cədvəllərini yeniləmək üçün çəkilən vaxta bərabər olacaqdır. Böyük məlumat yüklənməsi üçün bu xeyli çox vaxt olacaq. Buna görə əvvəlcə cədvəldəki bütün indeksləri söndürün və sonra məlumatları yükləyin. Bütün məlumatlar yükləndikdən sonra indeksləri aktivləşdirin.
  • Yaratdığınız indekslərin yüksək seçiciliyə sahib olmasını təmin edin: -Yüksək seçicili indekslər daha yaxşı performans verəcəkdir. Buna görə sütunda daha çox seçiciliyə malik olan indekslər yaradın. Ümumiyyətlə .33 seçiciliyindən çox olan istənilən indeks daha yaxşı performans verəcəkdir. Bir sütunun unikal dəyərləri varsa, onda seçicilik 1 - ümumiyyətlə əsas açar sütun olacaqdır. Buna görə sütunda indeks yaradaraq seçiciliyini yoxlayın və sonra indeks yaradın.

19. Kümelenmiş indeks nədir?

Tipik bir cədvəldə qeydlər cədvəlin Əsas düyməsinə əsasən sıralanır və diskdə saxlanılır. Ancaq cədvəlin sütununda klasterli indeks yaradıldıqda, qeydlər klasterli indeks sütununa əsasən sıralanır və diskdə saxlanılır. Başqa sözlə, klasterli indeks diskdə saxlanılan qeydlərin sırasını təyin edir.

Fərz edək ki, İŞÇİLƏR cədvəlindəki PHONE_NUMBER sütununda klasterli indeks yaratdıq. Sonra bütün ƏMƏKDAŞLAR qeydləri diskdəki PHONE_NUMBER nömrəsinə əsasən sıralanır və sonra indeks xəritəsi yaradılır. Beləliklə, indi işçinin bəzi telefon nömrələrini axtarmaq üçün hər hansı bir sorğu yazsaq - deyək ki, az və ya bərabər, böyük və ya bərabər, az, daha böyük və s., O zaman bütün qeydləri almaq asan olacaq. Çünki ilk qeyd alındıqdan sonra qeydlərin qalıqları dərhal yanında olur. Qalan qeydlər üçün bir daha gətirməyimiz lazım deyil.

20. Kümelenmiş indeksin istifadəsi nə zaman mənalı olacaq?

Bu tip indekslər indeks sütununun bir çox əlaqəli dəyərləri olduqda faydalıdır. Məsələn, bir sinif şagirdi üçün müxtəlif mövzularda, məsələn, 5 mövzuda qiymətlər var. Bu o deməkdir ki, hər tələbənin 5 fənn üzrə qiymətləri olacaqdır. Beləliklə, hər bir tələbənin ümumi qiymətlərini tapmalıyıqsa və 5 mövzu qiymətinin hamısının DB-də səpələndiyini təsəvvür etməliyiksə, onda onun qiymətlərini hesablamaq üçün çox vaxt lazımdır.
Bunun əvəzinə, tələbə adı və ya id üzərində qruplaşdırılmış indeksimiz varsa, bütün məlumatlar diskdəki ad və ya id-yə görə sıralanacaqdır. Bu o deməkdir ki, bir tələbə üçün qiymət götürdüyümüzdə, onun bütün qiymətləri bir-birinin ardınca əlçatan olacaqdır. Hər bir şagird üçün beş cədvəl üçün beş cədvəl gətirməyimiz lazım deyil.

21. Kümelenmiş indeksdən istifadə etməyin bir çatışmazlığı nədir?

İndeksləşdirilmiş sütunun müəyyən bir arada bir dəyəri olan yeni bir sətir olduqda, sıralanmış qaydanın qorunması üçün bütün qeydlərin dəyişdirilməsinə ehtiyac var. Eynilə, kümelenmiş indeksin yaradıldığı sütunda bir yeniləmə olduqda, qeydləri sıralanmış qaydada saxlayacaq şəkildə daşımalıyıq. Bu səbəbdən, birincil açar və ya xarici açar sütunlarında klasterləşdirilmiş indekslər yaradılır, bunun üçün yeniləmənin başlığı çox azdır.

22. Cədvəl çoxsaylı olmayan indekslərə sahib ola bilər, lakin yalnız bir klasterli indeksə malikdir. Niyə?

Bir cədvəldə klasterli indeks varsa, qeydləri klasterli indeksin yaradıldığı sütuna əsasən sıralanır. Buna görə birdən çox klasterli indeks yaratsaq, bütün bu sütunlar üçün cədvəl qeydlərini sıralaya bilmərik. Kümelenmənin edildiyi bir sütuna əsaslanan yalnız bir dəfə çeşidləmə etibarlıdır.

23. Kümelenmiş və Kümelenməmiş İndeks arasındakı fərq nədir?

Translate »
1