Əsas indekslə ikinci dərəcəli indeks arasındakı fərq nədir? Birinin digərindən üstünlüyü nədir?


cavab 1:

Əvvəlcə oxşarlıqları izah edim:

Bənzərliklər

  • Hər iki indeks quruluşu verilənlər bazasında ayrıca birinci sinif obyektlər kimi həyata keçirilir. Bu, cədvəlin və ona uyğun indeksin (ilkin və ya ikincil) iki ayrı quruluş kimi mövcudluğunu göstərir. Hər ikisi dolayı səviyəni həyata keçirir, burada sorğular əvvəlcə indeksi axtarır və həmin axtarışın nəticəsini birbaşa göstərdikləri qeydləri əldə etmək üçün istifadə edirlər. Hər iki indeks tipindəki indeks blokları girişləri sıralanır. yəni faktiki indeks girişi nə olursa olsun → ümumiyyətlə indeks blokundakı girişlər həmişə index / axtarış düyməsinə görə sıralanır.

Fərqlər

İlkin indeks

  • Bir ilkin indeks, məlumat bloklarında satırların saxlanmasına və təşkilinə təsir göstərir. Məlumat blokları, həqiqi sıra məlumatlarının (çox sütun) saxlandığı boşqab bloklarıdır. Birincil indeks üçün satırlar indeks düyməsindəki məlumat bloklarında çeşidlənməlidir. İndeks girişlərinin özlərini indeks blokunda sıraladığına əlavə olaraq, əsas indeks də məcburdur.Məlumat bloklardakı sətirlərin sırası. “Garcia Molina et al Hər bir məlumat blokunda, indeks düyməsinə görə sıralanan sıralar var.
  • Əsas indeks həm açar, həm də açar olmayan sütunlar üçün yaradıla bilər. Yalnız əsas açar üçün əsas bir indeks yoxdur. Bəli, ümumiyyətlə masanın əsas açarında yaradılır. Birincil indeks cədvəldə məlumatların tərtib olunduğunu (satırlar sıralanmalıdır) dəyişdirdiyinə görə, verilən cədvəldə maksimum 1 əsas indeks ola bilər.

Orta indeks

  • Orta indeks, satırların həqiqətən məlumat bloklarında necə qurulduğuna təsir göstərmir. İstənilən qaydada ola bilərlər. Yeganə sifariş indeks bloklarında indeks açarıdır. Aşağıdakı diaqram "Garcia Molina et al Məlumat bloklarında indeks açarına görə satırlar sıralanmır

Müqayisə

  • Birincisi, istifadəçi cədvəldəki satırların təşkilinə təsir göstərmədiyi üçün çoxsaylı ikinci indeksləri təyin edə bilər. Ancaq yalnız bir əsas indeks ola bilər. Birincil indeks mütləq əsas açarda olmalı olmadığından, ilkin indeksdə dublikat indeks düymələri də ola bilər. Əslində, yuxarıdakı nümunə, cüt düymələr üçün ikincil indeks üçün. Bu hər ikisinə ortaqdır. Əlbəttə ki, ilkin indeks əsas açarda yaradıldıqda, cüt açar indeks açarları ola bilməz, çünki ilkin açar UNİKAL SİYAHISI tətbiq edir. Həm ibtidai, həm də ikincili göstəricilər nöqtə axtarışı və sıra sorğuları üçün istifadə edilə bilər. Bununla birlikdə, əsas indeks üçün arayış sorğularının hər iki halda daha sürətli olacağı gözlənilir - unikal indeks açarı və dublikat indeks açarı. NON UNIQUE indeksində bir nöqtəli axtarışın ilkin indekslə daha sürətli olacağı gözlənilir. Ancaq indeks UNİQUE olsa, ideal olaraq ilkin və ikincili indeks ilə nöqtə axtarışı eyni vaxta getməlidir - ən azı eyni miqdarda I / O. Bu, əsas indeks məlumat bloklarında satırların sırasını məcbur etməsidir. Buna görə istifadəçi HARADA KEY> = 20 VƏ KEY <= 40 üçün satır tapmaqda maraqlıdırsa, daha az disk blokunun və buna görə daha az I / O-nun oxunması ehtimalı yüksəkdir. Bu düymələrə uyğun olan satırların eyni məlumat blokunda olması mümkündür (indeks unikal olmasa da). Digər tərəfdən, ikincil indeksdə satırların təşkili üzərində bir nəzarət yoxdur. 20 ilə 40 arasındakı bütün məlumat qeydlərini tapmaq üçün eyni nümunə üçün, hər düyməyə uyğun olan məlumat qeydlərinin ayrıca bir məlumat blokunda olması mümkündür. Aydındır ki, bu, daha çox I / Os olacağını göstərir və buna görə ikincil indeks ilə olan suallar daha az səmərəli ola bilər. Unikal indeks düymələri olan nöqtə axtarışları üçün indeksin ibtidai və ya ikinci dərəcəli olmağının fərqi yoxdur. Axtarışın nəticəsi bir sıra tapandır və faktiki qeyd almaq üçün verilənlər bazası hələ də onu izləməlidir. Beləliklə, tək I / O var. Birincil indeks məlumat bloklarında satırların sırasını məcbur etdiyi üçün DML-lər az effektivdir. DML-lər satırları bir məlumat bloku içərisində sıralanmış qaydada saxlamalı olduğundan, istifadəçi girişlərin ardıcıl qaydada düzəldilməsindən əmin olmadıqda INSERT / UPDATE tez-tez sıra növbələrinə səbəb olur. Hər bir DML, məlumat daxilində bir sıra sətirinin dəyişməsinə gətirib çıxarır.Blok da indeks girişindən bəri müvafiq əsas indeks quruluşunun yeniləməsini tələb edir. Sıra hərəkəti ikinci dərəcəli quruluşun yeniləməsini də tələb edir, lakin INSERT-in bir sıra hərəkətə səbəb olma ehtimalı ikincili indeks üçün nisbətən azdır, çünki INSERT bunu etmir, məlumat blokundakı sətirləri sıralanmış qaydada saxlamaq lazım deyil. Başqa bir bloka birlikdə daşınması lazım olan böyüyən satırlar kimi hallar, ikincil indeksdə satır hərəkətlərinin az hadisələrindən biridir.

cavab 2:

Bir ilkin indeks, B ağacına əsaslanan bir saxlama yerində cədvəlin həqiqi təməl satırlarını ehtiva edən bir saxlama quruluşudur. Bir qayda olaraq, indeks göstərilmişdirsə, PRIMARY KEY ətrafında təşkil edilir.

İbtidai indekslər bəzən "klasterli indekslər" adlanır, baxmayaraq ki, klasterləşdirilmiş indekslər deyilən hər şey "həqiqi" ilkin indeks tətbiqidir (yəni PostgreSQL-də olmayanlar).

Anbar mühərriklərinin böyük əksəriyyəti sütun məlumatlarından əldə edilmiş hər hansı bir sifariş olmadan əsas baza masa satırlarını saxlayır və "real" ilkin indeksləri həyata keçirmirlər.

Az DB saxlama mühərrikləri əslində ilkin indeksləri tətbiq edir. Oracle "Index Organized Masters" və MySQL InnoDB, ilkin indeksləri tətbiq edən ən çox istifadə olunan saxlama mühərrikləridir.

İndekslə tənzimlənmiş bir saxlama quruluşunun ən böyük üstünlüyü, PRIMARY KEY-də axtarışların B ağacının tək bir "gəzməsini" tələb etməsidir. Əksər digər yaddaş massivlərində PRIMARY KEY axtarışları iki addım tələb edir: biri PK-nın ətrafında qurulmuş ikincil bir quruluşda əsas masa sıra göstərici nöqtəsini axtarmaq və satırın özü.

Bu tənzimləmələrdə, PK axtarışları fərqli bir indeksi olan axtarışdan daha ucuz deyildir.

Əsas indeks baz cədvəlini təşkil etmək üçün istifadə olunduğundan, cədvəldə yalnız bir əldə edirsiniz.

Birincili indeks yaddaşının digər yaddaş növləri ilə müqayisədə əsas çatışmazlığı, yükləmə prosesinin yavaş ola biləcəyidir, çünki baza cədvəlindəki hər INSERT xəttin harada saxlanılacağını tapmaq üçün bir B ağacından keçməlidir. Birincili indeksləri dəstəkləyən yaddaş mühərriklərinin əksəriyyəti ilkin indeks açarlarını ikinci dərəcəli indekslər üçün axtarış identifikatoru kimi istifadə etdiyindən, uzun bir əsas açarınız varsa (yəni PK və ümumdünya bənzərsiz identifikator kimi bir şey istifadə edirsinizsə) çox yer tutan ikincili indekslərdən istifadə edə bilərsiniz. digər göstəricilərlə).


cavab 3:

Bir ilkin indeks, B ağacına əsaslanan bir saxlama yerində cədvəlin həqiqi təməl satırlarını ehtiva edən bir saxlama quruluşudur. Bir qayda olaraq, indeks göstərilmişdirsə, PRIMARY KEY ətrafında təşkil edilir.

İbtidai indekslər bəzən "klasterli indekslər" adlanır, baxmayaraq ki, klasterləşdirilmiş indekslər deyilən hər şey "həqiqi" ilkin indeks tətbiqidir (yəni PostgreSQL-də olmayanlar).

Anbar mühərriklərinin böyük əksəriyyəti sütun məlumatlarından əldə edilmiş hər hansı bir sifariş olmadan əsas baza masa satırlarını saxlayır və "real" ilkin indeksləri həyata keçirmirlər.

Az DB saxlama mühərrikləri əslində ilkin indeksləri tətbiq edir. Oracle "Index Organized Masters" və MySQL InnoDB, ilkin indeksləri tətbiq edən ən çox istifadə olunan saxlama mühərrikləridir.

İndekslə tənzimlənmiş bir saxlama quruluşunun ən böyük üstünlüyü, PRIMARY KEY-də axtarışların B ağacının tək bir "gəzməsini" tələb etməsidir. Əksər digər yaddaş massivlərində PRIMARY KEY axtarışları iki addım tələb edir: biri PK-nın ətrafında qurulmuş ikincil bir quruluşda əsas masa sıra göstərici nöqtəsini axtarmaq və satırın özü.

Bu tənzimləmələrdə, PK axtarışları fərqli bir indeksi olan axtarışdan daha ucuz deyildir.

Əsas indeks baz cədvəlini təşkil etmək üçün istifadə olunduğundan, cədvəldə yalnız bir əldə edirsiniz.

Birincili indeks yaddaşının digər yaddaş növləri ilə müqayisədə əsas çatışmazlığı, yükləmə prosesinin yavaş ola biləcəyidir, çünki baza cədvəlindəki hər INSERT xəttin harada saxlanılacağını tapmaq üçün bir B ağacından keçməlidir. Birincili indeksləri dəstəkləyən yaddaş mühərriklərinin əksəriyyəti ilkin indeks açarlarını ikinci dərəcəli indekslər üçün axtarış identifikatoru kimi istifadə etdiyindən, uzun bir əsas açarınız varsa (yəni PK və ümumdünya bənzərsiz identifikator kimi bir şey istifadə edirsinizsə) çox yer tutan ikincili indekslərdən istifadə edə bilərsiniz. digər göstəricilərlə).


cavab 4:

Bir ilkin indeks, B ağacına əsaslanan bir saxlama yerində cədvəlin həqiqi təməl satırlarını ehtiva edən bir saxlama quruluşudur. Bir qayda olaraq, indeks göstərilmişdirsə, PRIMARY KEY ətrafında təşkil edilir.

İbtidai indekslər bəzən "klasterli indekslər" adlanır, baxmayaraq ki, klasterləşdirilmiş indekslər deyilən hər şey "həqiqi" ilkin indeks tətbiqidir (yəni PostgreSQL-də olmayanlar).

Anbar mühərriklərinin böyük əksəriyyəti sütun məlumatlarından əldə edilmiş hər hansı bir sifariş olmadan əsas baza masa satırlarını saxlayır və "real" ilkin indeksləri həyata keçirmirlər.

Az DB saxlama mühərrikləri əslində ilkin indeksləri tətbiq edir. Oracle "Index Organized Masters" və MySQL InnoDB, ilkin indeksləri tətbiq edən ən çox istifadə olunan saxlama mühərrikləridir.

İndekslə tənzimlənmiş bir saxlama quruluşunun ən böyük üstünlüyü, PRIMARY KEY-də axtarışların B ağacının tək bir "gəzməsini" tələb etməsidir. Əksər digər yaddaş massivlərində PRIMARY KEY axtarışları iki addım tələb edir: biri PK-nın ətrafında qurulmuş ikincil bir quruluşda əsas masa sıra göstərici nöqtəsini axtarmaq və satırın özü.

Bu tənzimləmələrdə, PK axtarışları fərqli bir indeksi olan axtarışdan daha ucuz deyildir.

Əsas indeks baz cədvəlini təşkil etmək üçün istifadə olunduğundan, cədvəldə yalnız bir əldə edirsiniz.

Birincili indeks yaddaşının digər yaddaş növləri ilə müqayisədə əsas çatışmazlığı, yükləmə prosesinin yavaş ola biləcəyidir, çünki baza cədvəlindəki hər INSERT xəttin harada saxlanılacağını tapmaq üçün bir B ağacından keçməlidir. Birincili indeksləri dəstəkləyən yaddaş mühərriklərinin əksəriyyəti ilkin indeks açarlarını ikinci dərəcəli indekslər üçün axtarış identifikatoru kimi istifadə etdiyindən, uzun bir əsas açarınız varsa (yəni PK və ümumdünya bənzərsiz identifikator kimi bir şey istifadə edirsinizsə) çox yer tutan ikincili indekslərdən istifadə edə bilərsiniz. digər göstəricilərlə).