Veritaban─▒ endeksleme nas─▒l ├žal─▒┼č─▒r? [kapal─▒]


Al─▒nan cevaba git


Veri k├╝menizin boyutunun artmas─▒ nedeniyle indekslemenin ├žok ├Ânemli oldu─ču g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda, birisi endekslemenin veritaban─▒-agnostik seviyesinde nas─▒l ├žal─▒┼čt─▒─č─▒n─▒ a├ž─▒klayabilir mi?

Bir alan─▒ dizine alma sorgular─▒ hakk─▒nda bilgi i├žin, Bir veritaban─▒ s├╝tununu nas─▒l dizinleyebilirim .


2307









Cevap say─▒s─▒n─▒ say: 8






Neden gerekli?

Veriler disk tabanl─▒ depolama ayg─▒tlar─▒nda depoland─▒─č─▒nda, veri bloklar─▒ olarak depolan─▒r. Bu bloklara, atom disk eri┼čim i┼člemi yaparak b├╝t├╝n├╝yle eri┼čilir. Disk bloklar─▒, ba─člant─▒l─▒ listelerle ayn─▒ ┼čekilde yap─▒land─▒r─▒lm─▒┼čt─▒r; her ikisi de veri i├žin bir b├Âl├╝m, bir sonraki d├╝─č├╝m├╝n (veya blo─čun) konumuna bir i┼čaret├ži i├žerir ve her ikisinin de biti┼čik olarak depolanmas─▒ gerekmez.

Kay─▒tlar─▒n bir numara sadece bir alanda s─▒ralanabilir ger├že─či nedeniyle, s─▒ralanmam─▒┼čt─▒r bir alanda arama gerektiren bir Do─črusal Arama gerektirdi─čini ifade edebiliriz N/2 blok eri┼čimler (ortalama olarak), nerede N blok say─▒s─▒ oldu─čunu masa yay─▒l─▒r. Bu alan kilit olmayan bir alan ise (yani benzersiz giri┼čler i├žermiyorsa), N blok eri┼čimlerinde t├╝m tablo alan─▒n─▒n aranmas─▒ gerekir .

S─▒ralanm─▒┼č bir alana sahipken, log2 N blok eri┼čimi olan bir ─░kili Arama kullan─▒labilir . Ayr─▒ca, veriler kilit olmayan bir alana g├Âre s─▒raland─▒─č─▒ndan, tablonun geri kalan─▒n─▒n, daha y├╝ksek bir de─čer bulundu─čunda, yinelenen de─čerler i├žin aranmas─▒na gerek yoktur. Bu nedenle performans art─▒┼č─▒ ├Ânemli.

─░ndeksleme nedir?

─░ndeksleme, birden ├žok alanda bir dizi kayd─▒ s─▒ralaman─▒n bir yoludur. Tablodaki bir alanda bir dizin olu┼čturmak, alan de─čerini tutan ba┼čka bir veri yap─▒s─▒ ve ilgili kay─▒tlara bir i┼čaret├ži olu┼čturur. Bu indeks yap─▒s─▒ daha sonra ─░kili Aramalar─▒n ├╝zerinde yap─▒lmas─▒na izin verecek ┼čekilde s─▒ralan─▒r.

─░ndekslemenin dezavantaj─▒, endekslerin MyISAM motorunu kullanarak bir tabloda birlikte depoland─▒─č─▒ndan, bu indekslerin disk ├╝zerinde ek alan gerektirmesidir; bu dosya, ayn─▒ tabloda bulunan bir├žok alan─▒n endekslenmesi durumunda, temel dosya sisteminin boyut s─▒n─▒rlar─▒na h─▒zla ula┼čabilir. .

O nas─▒l ├žal─▒┼č─▒r?

─░lk olarak, bir ├Ârnek veritaban─▒ tablosu ┼čemas─▒ ├Âzetleyelim;

Alan ad─▒ Veri t├╝r├╝ Diskteki boyut
id (Birincil anahtar) ─░mzas─▒z INT 4 bayt
firstName Char (50) 50 bayt
lastName Char (50) 50 bayt
emailAdresi Char (100) 100 bayt

Not : char, disk de─čerinde do─čru bir boyut elde etmek i├žin varchar yerine kullan─▒ld─▒. Bu ├Ârnek veritaban─▒ be┼č milyon sat─▒r i├žeriyor ve indekslenmemi┼č. Birka├ž sorgunun performans─▒ ┼čimdi analiz edilecektir. Bunlar, id (s─▒ral─▒ bir anahtar alan) ve firstName (anahtar olmayan bir s─▒ralanmam─▒┼č alan) kullanan bir sorgu .

├ľrnek 1 - s─▒ralanmam─▒┼č alanlara g├Âre s─▒ralanm─▒┼č

r = 5,000,000 Kay─▒t b├╝y├╝kl├╝─č├╝nde R = 204 bayt veren sabit b├╝y├╝kl├╝kteki kay─▒t veri taban─▒m─▒z g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda , varsay─▒lan blok b├╝y├╝kl├╝─č├╝ B = 1,024 bayt kullanan MyISAM motoru kullan─▒larak bir tabloda saklan─▒r . Tablonun engelleme fakt├Âr├╝, bfr = (B/R) = 1024/204 = 5 disk blo─ču ba┼č─▒na kay─▒t olacakt─▒r . Masay─▒ tutmak i├žin gereken toplam blok say─▒s─▒ N = (r/bfr) = 5000000/5 = 1,000,000 bloktur.

─░d alan─▒ndaki do─črusal bir arama, id alan─▒n─▒n N/2 = 500,000 anahtar bir alan oldu─ču g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda, bir de─čer bulmak i├žin ortalama bir blok eri┼čim gerektirir . Ancak id alan─▒ da s─▒raland─▒─č─▒ndan, ortalama log2 1000000 = 19.93 = 20 blok eri┼čim gerektiren bir ikili arama yap─▒labilir . An─▒nda g├Ârebiliyoruz ki bu ┼čiddetli bir geli┼čme.

┼×imdi, firstName alan─▒ ne s─▒ralan─▒r ne de bir anahtar aland─▒r, bu nedenle ikili arama imkans─▒z de─čildir, ne de de─čerler benzersiz de─čildir ve bu nedenle tablo tam bir N = 1,000,000 blok eri┼čimi i├žin sonuna kadar arama yapmay─▒ gerektirir . ─░ndekslemenin d├╝zeltmeyi ama├žlad─▒─č─▒ durum budur.

Bir dizin kayd─▒n─▒n yaln─▒zca dizine al─▒nm─▒┼č alan─▒ ve orijinal kayd─▒n bir g├Âstergesini i├žerdi─či g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda, i┼čaret etti─či ├žoklu alan kayd─▒ndan daha k├╝├ž├╝k olmas─▒n─▒n nedeni budur. Bu y├╝zden endeksin kendisi orijinal tablodan daha az disk blo─ču gerektirir, bu nedenle yinelemek i├žin daha az blok eri┼čimi gerektirir. FirstName alan─▒ndaki bir dizinin ┼čemas─▒ a┼ča─č─▒da ├Âzetlenmi┼čtir;

Alan ad─▒ Veri t├╝r├╝ Diskteki boyut
firstName Char (50) 50 bayt
(kay─▒t i┼čaret├žisi) ├ľzel 4 bayt

Not : MySQL'deki i┼čaret├žiler, tablonun boyutuna ba─čl─▒ olarak uzunluklar─▒ 2, 3, 4 veya 5 baytt─▒r.

├ľrnek 2 - indeksleme

r = 5,000,000 ─░ndeks kay─▒t R = 54 bayt uzunlu─čuna sahip ve varsay─▒lan blok b├╝y├╝kl├╝─č├╝ndeki B = 1,024 baytlar─▒ kullanan kay─▒t veri taban─▒m─▒za g├Âre Endeksin blokaj fakt├Âr├╝, bfr = (B/R) = 1024/54 = 18 disk blo─ču ba┼č─▒na kay─▒t olacakt─▒r . Dizini tutmak i├žin gereken toplam blok say─▒s─▒ N = (r/bfr) = 5000000/18 = 277,778 bloktur.

┼×imdi firstName alan─▒n─▒ kullanan bir arama, performans─▒ art─▒rmak i├žin dizini kullanabilir. Bu, indeks ├╝zerinde ortalama log2 277778 = 18.08 = 19 blok eri┼čimli bir ikili arama yap─▒lmas─▒na izin verir . Okumak i├žin daha fazla blok eri┼čimi gerektiren as─▒l kayd─▒n adresini bulmak, toplam eri┼čimi engellemek i├žin, dizin olu┼čturulmu┼č olmayan tabloda 19 + 1 = 20 bir ilk ad e┼čle┼čmesi bulmak i├žin gereken 1.000.000 blok eri┼čiminden ├žok uzakta .

Ne zaman kullan─▒lmal─▒?

Dizin olu┼čturman─▒n ek disk alan─▒ gerektirdi─či (yukar─▒daki ├Ârnekten 277.778 blok fazla,% ~ 28 art─▒┼č) ve ├žok fazla endeksin dosya sistemi boyut s─▒n─▒rlar─▒ndan kaynaklanan sorunlara neden olabilece─či g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda, do─čru se├žimi se├žmek i├žin dikkatli d├╝┼č├╝nmek gerekir. endekslenecek alanlar.

Endeksler yaln─▒zca kay─▒tlar i├žinde e┼čle┼čen bir alan aramas─▒n─▒ h─▒zland─▒rmak i├žin kullan─▒ld─▒─č─▒ndan, yaln─▒zca ├ž─▒kt─▒ i├žin kullan─▒lan endeksleme alanlar─▒n─▒n basit├že bir ekleme veya silme i┼člemi yaparken disk alan─▒ ve i┼čleme zaman─▒n─▒n bo┼ča harcanmas─▒, ve b├Âylece ka├ž─▒n─▒lmal─▒d─▒r. Ayr─▒ca, ikili bir araman─▒n niteli─či g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda, verinin ├Ânemlili─či veya benzersizli─či ├Ânemlidir. Kardinalli─či 2 olan bir alanda indeksleme i┼člemi verileri ikiye b├Âlerken 1000 kardinalitesi yakla┼č─▒k 1.000 kay─▒t verir. B├Âyle d├╝┼č├╝k bir kardinalite ile, etkinlik do─črusal bir s─▒ralamaya indirgenir ve sorgu optimize edici, e─čer kardinalite kay─▒t numaras─▒n─▒n% 30'undan azsa endeksi kullanmaktan ka├ž─▒n─▒r ve endeksi etkin bir ┼čekilde bo┼ča harcar.


3387







Bunu ilk okudumda bana ├žok yard─▒mc─▒ oldu. Te┼čekk├╝r ederim.

O zamandan beri indeks olu┼čturman─▒n olumsuz y├Ânleri hakk─▒nda biraz fikir edindim: bir dizine bir tablo ( UPDATE veya INSERT ) yazarsan─▒z, dosya sisteminde asl─▒nda iki yazma i┼čleminiz var. Tablo verileri i├žin bir tane ve dizin verileri i├žin bir tane (ve bunun belirtilmesi (ve - k├╝melenmi┼čse - tablo verilerinin ├ž─▒kar─▒lmas─▒)). Tablo ve dizin ayn─▒ sabit diskte bulunuyorsa, bu daha fazla zaman al─▒r. B├Âylece indekssiz (y─▒─č─▒n) bir tablo daha h─▒zl─▒ yazma i┼člemlerine izin verir. (iki endeksiniz olsayd─▒, ├╝├ž yazma i┼člemi ile sonu├žlanacakt─▒ vb.)

Bununla birlikte, dizin verileri ve tablo verileri i├žin iki farkl─▒ sabit diskte iki farkl─▒ konum tan─▒mlamak, zaman maliyetindeki sorunu azaltabilir / ortadan kald─▒rabilir. Bu, istenen sabit disklerdeki dosyalara g├Âre ek dosya gruplar─▒n─▒n ve istenen tablo / dizin konumlar─▒n─▒n tan─▒mlanmas─▒n─▒ gerektirir.

Dizinlerle ilgili ba┼čka bir sorun da, veriler eklendik├že zaman i├žinde par├žalanmas─▒d─▒r. REORGANIZE yard─▒mc─▒ olur, bunu yapmak i├žin rutinleri yazmal─▒s─▒n─▒z.

Baz─▒ senaryolarda y─▒─č─▒n, indeksli bir tablodan daha yararl─▒d─▒r,

├Ârne─čin: - ├çok say─▒da rakip yazma yazar─▒n─▒z varsa ancak yaln─▒zca bir gece raporlama i├žin ├žal─▒┼čma saatleri d─▒┼č─▒nda okuyunuz.

Ayr─▒ca, k├╝melenmi┼č ve k├╝melenmemi┼č dizinler aras─▒ndaki bir ayr─▒m olduk├ža ├Ânemlidir.

Bana yard─▒mc─▒ oldu: - K├╝melenmi┼č ve K├╝melenmemi┼č endeksi ger├žekte ne anlama geliyor?


232







Klasik ├Ârnek "Kitaplardaki ─░ndeks"

Her biri X sayfal─▒, 100 k─▒sma b├Âl├╝nm├╝┼č 1000 sayfal─▒k bir "Kitap" d├╝┼č├╝n├╝n.

Basit, ha?

┼×imdi, bir dizin sayfas─▒ olmadan, "S" harfiyle ba┼člayan belirli bir b├Âl├╝m├╝ bulmak i├žin, t├╝m kitab─▒ taramaktan ba┼čka se├žene─činiz yoktur. ├Ârn .: 1000 sayfa

Ancak ba┼č─▒nda bir dizin sayfas─▒ ile orada. Ve dahas─▒, ├Ânemli olan herhangi bir b├Âl├╝m├╝ okumak i├žin, indeks sayfas─▒na her seferinde tekrar tekrar bakman─▒z yeterlidir. E┼čle┼čen indeksi bulduktan sonra, di─čer b├Âl├╝mleri atlayarak verimli bir ┼čekilde b├Âl├╝me atlayabilirsiniz.

Ancak, 1000 sayfaya ek olarak, dizin sayfas─▒n─▒ g├Âr├╝nt├╝lemek i├žin ~ 10 sayfaya daha ihtiyac─▒n─▒z olacak, yani toplam 1010 sayfa.

Bu nedenle, dizin, dizine al─▒nm─▒┼č s├╝tun + i┼čaret├žisi de─čerlerini dizilmi┼č sat─▒rda verimli aramalar i├žin s─▒ral─▒ bir s─▒rayla saklayan ayr─▒ bir b├Âl├╝md├╝r.

Okullarda i┼čler basit, de─čil mi? : P


221







Dizin yaln─▒zca bir veritaban─▒ndaki belirli bir s├╝tun i├žin aramay─▒ daha h─▒zl─▒ yapan bir veri yap─▒s─▒d─▒r. Bu yap─▒ genellikle bir b-a─čac─▒ veya karma tablodur, ancak herhangi bir ba┼čka mant─▒k yap─▒s─▒ olabilir.


217







┼×imdi, 'Abc' adl─▒ ├žal─▒┼čanlar─▒n t├╝m ayr─▒nt─▒lar─▒n─▒ bulmak i├žin bir sorgu ├žal─▒┼čt─▒rmak istedi─čimizi varsayal─▒m?

 SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'
 

Dizin olmadan ne olur?

Veritaban─▒ yaz─▒l─▒m─▒ kelimenin tam anlam─▒yla ├çal─▒┼čan sat─▒r─▒ndaki ├çal─▒┼čan sat─▒r─▒n─▒n 'Abc' olup olmad─▒─č─▒n─▒ g├Ârmek i├žin ├çal─▒┼čan tablosundaki her bir s─▒raya bakmak zorundad─▒r. Biz de i├žinde ad─▒ 'Abc' ile her sat─▒r istiyoruz ├ž├╝nk├╝ biz ad─▒ 'Abc' ile sadece bir sat─▒r bulduktan sonra ad─▒ ile di─čer sat─▒rlar olabilir ├ž├╝nk├╝, biz sadece bakarak duramazs─▒n Abc . Bu nedenle, son sat─▒r─▒n sonuna kadar her sat─▒r aranmal─▒d─▒r - bu, bu senaryoda binlerce sat─▒r─▒n, 'Abc' ad─▒ndaki sat─▒rlar─▒ bulmak i├žin veritaban─▒ taraf─▒ndan incelenmesi gerekti─či anlam─▒na gelir. Tam tablo taramas─▒ buna denir

Bir veritaban─▒ dizini performansa nas─▒l yard─▒mc─▒ olabilir?

Bir endekse sahip olman─▒n as─▒l amac─▒, incelenmesi gereken bir tablodaki kay─▒t / sat─▒r say─▒s─▒n─▒ esasen keserek arama sorgular─▒n─▒ h─▒zland─▒rmakt─▒r. Dizin, bir tablodaki belirli bir s├╝tunun de─čerlerini saklayan bir veri yap─▒s─▒d─▒r (en yayg─▒n olarak bir B a─čac─▒).

B-a─ča├žlar─▒ endeksi nas─▒l ├žal─▒┼č─▒r?

B-a─ča├žlar─▒n─▒n endeksler i├žin en pop├╝ler veri yap─▒s─▒ olmas─▒n─▒n nedeni zaman verimli olmalar─▒ndan kaynaklanmaktad─▒r - ├ž├╝nk├╝ aramalar, silme ve ekleme i┼člemlerinin t├╝m├╝ logaritmik s├╝rede yap─▒labilir. Ve B a─ča├žlar─▒n─▒n daha s─▒k kullan─▒lmas─▒n─▒n bir ba┼čka ├Ânemli nedeni, B a─čac─▒nda depolanan verilerin s─▒ralanabilmesidir. RDBMS tipik olarak hangi veri yap─▒s─▒n─▒n bir indeks i├žin ger├žekten kullan─▒ld─▒─č─▒n─▒ belirler. Ancak, belirli RDBMS'lerin bulundu─ču baz─▒ senaryolarda, dizini olu┼čtururken veritaban─▒n─▒z─▒n hangi veri yap─▒s─▒n─▒ kullanmas─▒n─▒ istedi─činizi belirtebilirsiniz.

Karma tablo dizini nas─▒l ├žal─▒┼č─▒r?

Karma dizinlerinin kullan─▒lmas─▒n─▒n nedeni karma tablolar─▒n sadece de─čerleri ararken gelince ├žok verimli olmalar─▒d─▒r. Bu nedenle, bir dize ile e┼čitli─či kar┼č─▒la┼čt─▒ran sorgular, bir karma dizini kullan─▒yorlarsa de─čerleri ├žok h─▒zl─▒ alabilir.

├ľrne─čin, daha ├Ânce tart─▒┼čt─▒─č─▒m─▒z sorgu, ├çal─▒┼čan_Ad─▒ s├╝tununda olu┼čturulan bir karma dizinden yararlanabilir. Bir karma dizininin ├žal─▒┼čaca─č─▒ y├Ântem, s├╝tun de─čerinin karma tablosundaki anahtar olaca─č─▒ ve bu anahtara e┼členen ger├žek de─čerin, tablodaki sat─▒r verilerinin bir g├Âstergesi olaca─č─▒d─▒r. Bir karma tablo temelde bir ili┼čkisel dizi oldu─čundan, tipik bir girdi ÔÇťAbc => 0x28939 ÔÇ│ gibi g├Âr├╝n├╝r, burada 0x28939, Abc'nin bellekte depoland─▒─č─▒ tablo sat─▒r─▒na bir referanst─▒r. Bir hash tablo dizininde ÔÇťAbcÔÇŁ gibi bir de─čere bakmak ve bellekteki sat─▒ra geri d├Ânmek, Employee_Name s├╝tunundaki ÔÇťAbcÔÇŁ de─čerine sahip t├╝m sat─▒rlar─▒ bulmak i├žin tabloyu taramaktan ├žok daha h─▒zl─▒d─▒r.

Hash endeksinin dezavantajlar─▒

Karma tablolar veri yap─▒lar─▒na g├Âre s─▒ralanmaz ve karma dizinlerin yard─▒mc─▒ olamad─▒─č─▒ bir├žok sorgu t├╝r├╝ vard─▒r. ├ľrne─čin, 40 ya┼č─▒n alt─▒ndaki ├žal─▒┼čanlar─▒n t├╝m├╝n├╝ bulmak istedi─činizi varsayal─▒m. Bunu bir karma tablo indeksi ile nas─▒l yapabildiniz? Eh, m├╝mk├╝n de─čil ├ž├╝nk├╝ karma tablo yaln─▒zca anahtar de─čer ├žiftlerini aramak i├žin iyidir - bu e┼čitli─či kontrol eden sorgular anlam─▒na gelir

Veri taban─▒ dizininde tam olarak ne var? Dolay─▒s─▒yla, bir tablodaki bir s├╝tunda bir veritaban─▒ dizininin olu┼čturuldu─čunu ve dizinin bu s├╝tundaki de─čerleri depolad─▒─č─▒n─▒ biliyorsunuz. Ancak, bir veritaban─▒ endeksinin de─čerleri ayn─▒ tablonun di─čer s├╝tunlar─▒nda saklamad─▒─č─▒n─▒ anlamak ├Ânemlidir. ├ľrne─čin, Employee_Name s├╝tununda bir dizin olu┼čturursak, bu, Employee_Age ve Employee_Address s├╝tun de─čerlerinin de dizinde depolanmad─▒─č─▒ anlam─▒na gelir. Di─čer t├╝m s├╝tunlar─▒ dizinde saklarsak, o zaman t├╝m tablonun ba┼čka bir kopyas─▒n─▒ olu┼čturmak gibi olur - bu da ├žok fazla yer kaplar ve ├žok verimsiz olur.

Bir dizinin ne zaman kullan─▒laca─č─▒n─▒ bir veritaban─▒ nas─▒l biliyor? ÔÇťSELECT * FROM ├çal─▒┼čan WHERE Employee_Name = 'Abc'ÔÇŁ gibi bir sorgu ├žal─▒┼čt─▒r─▒ld─▒─č─▒nda, veritaban─▒ sorgulanan s├╝tun (lar) ├╝zerinde bir indeks olup olmad─▒─č─▒n─▒ kontrol eder. Employee_Name s├╝tununun ├╝zerinde olu┼čturulmu┼č bir dizini oldu─čunu varsayarsak, veritaban─▒n─▒n aranan de─čerleri bulmak i├žin dizini kullanman─▒n ger├žekten anlaml─▒ olup olmad─▒─č─▒na karar vermesi gerekir - ├ž├╝nk├╝ veritaban─▒ dizinini kullanman─▒n ger├žekten daha az etkili oldu─ču baz─▒ senaryolar vard─▒r. ve sadece t├╝m tabloyu taramak i├žin daha verimli.

Bir veritaban─▒ endeksine sahip olman─▒n maliyeti nedir?

Yer kapl─▒yor - ve masan─▒z ne kadar b├╝y├╝k olursa, dizininiz de o kadar b├╝y├╝k olur. Dizinlerle g├Âsterilen di─čer bir performans ise, ilgili tablodaki sat─▒rlar─▒ ekledi─činizde, sildi─činizde veya g├╝ncelledi─činizde ayn─▒ i┼člemlerin dizininizde yap─▒lmas─▒ gerekmesidir. Bir dizinin, dizinin i├žerdi─či tablo s├╝tununda yer alan verilerle ayn─▒ dakikadaki verileri i├žermesi gerekti─čini unutmay─▒n.

Genel bir kural olarak, bir dizinde, ancak dizine al─▒nm─▒┼č s├╝tundaki veriler s─▒k├ža sorgulanacaksa, bir tabloda olu┼čturulmal─▒d─▒r.

Ayr─▒ca bak─▒n─▒z

  1. Hangi s├╝tunlar genellikle iyi dizinler olu┼čturur?
  2. Veritaban─▒ dizinleri nas─▒l ├žal─▒┼č─▒r?

141







Basit bir a├ž─▒klama!

Dizin, bir tabloda belirli bir s├╝tunun de─čerlerini depolayan bir veri yap─▒s─▒ndan ba┼čka bir ┼čey de─čildir . Bir tablonun s├╝tununda bir dizin olu┼čturulur.

├ľrnek: User ├ť├ž s├╝tunla adland─▒r─▒lan bir veritaban─▒ tablomuz var - Name , Age ve Address . User Masan─▒n binlerce sat─▒r oldu─čunu varsayal─▒m .

┼×imdi, 'John' adl─▒ kullan─▒c─▒n─▒n t├╝m ayr─▒nt─▒lar─▒n─▒ bulmak i├žin bir sorgu ├žal─▒┼čt─▒rmak istedi─čimizi varsayal─▒m. A┼ča─č─▒daki sorguyu ├žal─▒┼čt─▒r─▒rsak:

 SELECT * FROM User 
WHERE Name = 'John'
 

Veritaban─▒ yaz─▒l─▒m─▒ kelimenin tam anlam─▒yla bu sat─▒r─▒n 'John' User olup olmad─▒─č─▒n─▒ g├Ârmek i├žin tablodaki her bir s─▒raya bakmak zorunda kalacakt─▒ Name . Bu uzun zaman alacak.

Buras─▒ index bize yard─▒mc─▒ olur: indeks, ara┼čt─▒r─▒lmas─▒ gereken bir tablodaki kay─▒t / sat─▒r say─▒s─▒n─▒ azaltmak i├žin arama sorgular─▒n─▒ h─▒zland─▒rmak i├žin kullan─▒l─▒r .

Dizin nas─▒l olu┼čturulur:

 CREATE INDEX name_index
ON User (Name)
 

Bir tablodaki s├╝tun de─čerlerinden (├ľrn: John) index olu┼čur ve bu de─čerler bir veri yap─▒s─▒nda saklan─▒r .

┼×imdi veritaban─▒, John ad─▒ndaki ├žal─▒┼čanlar─▒ bulmak i├žin dizini kullanacak ├ž├╝nk├╝ dizin, b├╝y├╝k olas─▒l─▒kla Kullan─▒c─▒lar ad─▒na g├Âre alfabetik olarak s─▒ralanacak. Ve s─▒raland─▒─č─▒ndan, bir isim aramak ├žok daha h─▒zl─▒ demektir ├ž├╝nk├╝ ÔÇťJÔÇŁ ile ba┼člayan t├╝m isimler dizinde yan yana olur!


76







Sadece h─▒zl─▒ bir ├Âneri .. Endeksleme maliyeti size ek yazmalar ve depolama alan─▒ sa─člar, bu nedenle uygulaman─▒z daha fazla ekleme / g├╝ncelleme i┼člemi gerektiriyorsa, indekssiz tablolar─▒ kullanmak isteyebilirsiniz, ancak daha fazla veri alma i┼člemi gerektiriyorsa, indeksli olmal─▒s─▒n─▒z tablo.


32


2015-01-14





Veritaban─▒ Dizini'ni bir kitab─▒n Dizini olarak d├╝┼č├╝n├╝n.

E─čer k├Âpeklerle ilgili bir kitab─▒n─▒z varsa ve diyelim ki Alman ├çobanlar hakk─▒nda bir bilgi bulmak istiyorsan─▒z, elbette kitab─▒n t├╝m sayfalar─▒n─▒ ├ževirebilir ve arad─▒─č─▒n─▒z─▒ bulabilirsiniz - ama bu elbette zaman al─▒c─▒d─▒r ve ├žok h─▒zl─▒.

Di─čer bir se├ženek ise, kitab─▒n Dizin b├Âl├╝m├╝ne gidip daha sonra arad─▒─č─▒n─▒z─▒, (bu durumda, Alman ├çobanlar─▒) arad─▒─č─▒n─▒z─▒ ve ayn─▒ zamanda sayfa numaras─▒na bakarak arad─▒─č─▒n─▒z─▒ bulabilmenizdir. arad─▒─č─▒n─▒z─▒ h─▒zl─▒ca bulun.

Veritaban─▒nda, sayfa numaras─▒na veri taban─▒n─▒ varl─▒─č─▒n bulundu─ču diskteki adrese y├Ânlendiren bir i┼čaret├ži denir. Ayn─▒ Alman ├çoban analojisini kullanarak, Alman ├çoban 0x77129 i├žin sat─▒r verilerinin depoland─▒─č─▒ diskteki adresin oldu─ču ÔÇťAlman ├çobanÔÇŁ, 0x77129 gibi bir ┼čeye sahip olabiliriz .

K─▒sacas─▒, bir dizin, sorgu aramay─▒ h─▒zland─▒rmak i├žin belirli bir s├╝tundaki de─čerleri bir tabloda saklayan bir veri yap─▒s─▒d─▒r.


31