Soru Veritabanı indeksleme nasıl çalışır?


Veri kümenizin boyutu arttıkça indekslemenin o kadar önemli olduğu göz önüne alındığında, birisi dizinlemenin veritabanı-agnostik düzeyde nasıl çalıştığını açıklayabilir mi?

Bir alanı dizine eklemek için sorgular hakkında bilgi almak için, çıkış yapın Bir veritabanı sütununu nasıl endekslerim.


1878
2017-08-04 10:07


Menşei


Kontrol edebilirsin - Veritabanı indeksleme nasıl çalışır? - Aniket Thakur


Cevaplar:


Neden ihtiyaç duyuluyor?

Veri, disk tabanlı depolama aygıtlarında depolandığında, veri blokları olarak depolanır. Bu bloklara bütünüyle erişilir ve bu sayede atomik disk erişim işlemi sağlanır. Disk blokları, bağlantılı listelerle aynı şekilde yapılandırılmıştır; her ikisi de veri için bir bölüm içerir, bir sonraki düğümün (veya bloğun) konumuna işaret eder ve her ikisinin de bitişik olarak saklanmasına gerek yoktur.

Bazı kayıtların yalnızca bir alanda sıralanabilmesi nedeniyle, sıralamayan bir alanın aranmasının gerekli olan bir Doğrusal Arama gerektirdiğini söyleyebiliriz. N/2 blok erişim (ortalama), nerede N tablonun yaydığı blok sayısıdır. Bu alan anahtar olmayan bir alan ise (yani benzersiz giriş içermiyorsa), tüm tablo alanında arama yapılmalıdır. N blok erişir.

Sıralı bir alanla birlikte, bir İkili Arama kullanılabilir; log2 N blok erişir. Ayrıca, veriler anahtar olmayan bir alan verildiği için sıralandığından, daha yüksek bir değer bulunduğunda tablonun geri kalanı yinelenen değerler için aranmaya ihtiyaç duymaz. Böylece performans artışı önemlidir.

İndeksleme nedir?

Dizin Oluşturma, birden çok alanda bir dizi kaydı ayırmanın bir yoludur. Tablodaki bir alandaki bir indeks oluşturmak, alan değerini tutan başka bir veri yapısı ve bununla ilgili kayda bir işaretçi oluşturur. Bu dizin yapısı daha sonra sıralanır ve Binary Aramalar'ın üzerinde gerçekleştirilmesine izin verir.

Dizinlemenin olumsuz tarafı, dizinlerin bir tabloda MyISAM motorunu kullanarak birlikte depolandığından, bu dizinlerin diskte ek alan gerektirmesidir, bu dosya aynı tablo içindeki birçok alanın dizine eklenmesi durumunda temel dosya sisteminin boyut sınırlarına hızla erişebilir .

O nasıl çalışır?

Öncelikle örnek bir veritabanı tablosu şemasını çizelim;

Alan adı Veri türü Diskte boyut
kimlik (Birincil anahtar) İmzasız INT 4 bayt
firstName Char (50) 50 bayt
lastName Char (50) 50 bayt
emailAddress Char (100) 100 bayt

Not: disk değerinde doğru bir boyut sağlamak için varchar yerine char kullanıldı. Bu örnek veritabanı beş milyon satır içerir ve dizine eklenmez. Birkaç sorgunun performansı şimdi analiz edilecektir. Bunlar bir sorgu kullanarak İD (sıralanan bir anahtar alan) ve İsim (anahtarlanmamış bir alan).

örnek 1 - sıralanmamış alanlara göre sıralanmış

Bizim örnek veritabanı göz önüne alındığında r = 5,000,000 kayıt uzunluğu veren sabit bir büyüklükte kayıtlar R = 204 baytlar ve varsayılan blok boyutunu kullanan MyISAM motorunu kullanarak bir tabloda depolanırlar. B = 1,024bayt. Tablonun bloke edici faktörü bfr = (B/R) = 1024/204 = 5 disk bloğu başına kayıtlar. Tabloyu tutmak için gereken toplam blok sayısı N = (r/bfr) = 5000000/5 = 1,000,000 blokları.

Kimlik alanında doğrusal bir arama, ortalama bir N/2 = 500,000 id alanının bir anahtar alan olduğu düşünüldüğünde bir değer bulmak için blokları engeller. Ancak kimlik alanı da sıralandığı için, ortalama bir arama gerektiren bir ikili arama gerçekleştirilebilir. log2 1000000 = 19.93 = 20 blok erişir. Anında, bunun büyük bir gelişme olduğunu görebiliriz.

Şimdi İsim alan ne sıralanır ne de bir anahtar alan, bu yüzden ikili bir arama imkansızdır, ne de değerler benzersizdir ve bu nedenle tablonun tam olarak aranması gerekir. N = 1,000,000 blok erişir. Dizinlemenin düzeltmeyi amaçladığı durum budur.

Bir indeks kaydının sadece indekslenmiş alan ve orijinal kayda bir işaretçi içerdiği düşünüldüğünde, bunun işaret ettiği çok alanlı kayıttan daha küçük olması anlamına gelir. Dolayısıyla, indeksin kendisi orijinal tablodan daha az disk bloğu gerektirir; bu nedenle, yineleme için daha az blok erişimi gerektirir. Bir dizinin şeması İsim alan aşağıda özetlenmiştir;

Alan adı Veri türü Diskte 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 2, 3, 4 veya 5 bayt uzunluğundadır.

Örnek 2  - indeksleme

Bizim örnek veritabanı göz önüne alındığında r = 5,000,000 bir endeks kayıt uzunluğu ile kayıtlar R = 54 baytlar ve varsayılan blok boyutunu kullanma B = 1,024 bayt. Endeksin bloke edici faktörü bfr = (B/R) = 1024/54 = 18 disk bloğu başına kayıtlar. Dizini tutmak için gereken toplam blok sayısı N = (r/bfr) = 5000000/18 = 277,778 blokları.

Şimdi kullanarak bir arama İsim alan, performansı artırmak için endeksi kullanabilir. Bu, indeksin ortalama ile bir ikili aramasına izin verir. log2 277778 = 18.08 = 19 blok erişir. Okunacak daha fazla blok erişimi gerektiren asıl kaydın adresini bulmak için 19 + 1 = 20 blok girişleri, bulmak için gereken 1.000.000 blok erişimden çok uzak İsim Dizine eklenmemiş tabloda eşleşir.

Ne zaman kullanılmalıdır?

Bir dizin oluşturulmasının ek disk alanı gerektirdiği göz önüne alındığında (yukarıdaki örnekten fazla 277,778 blok,% ~ 28'lik bir artış) ve çok fazla sayıda dizin dosya sistemi boyut sınırlarından kaynaklanan sorunlara neden olabilir, doğru seçimi yapmak için dikkatli bir düşünce kullanılmalıdır. endekslenecek alanlar.

Dizinler yalnızca kayıtlar içinde eşleşen bir alanı aramayı hızlandırmak için kullanıldığından, yalnızca çıktı için kullanılan indeksleme alanlarının bir ekleme veya silme işlemi yaparken sadece disk alanı kaybı ve işlem süresi kaybı anlamına gelir. kaçınılmalıdır. İkili bir aramanın doğası da göz önüne alındığında, verilerin asallığı veya tekliği önemlidir. Kardinalliği 2 olan bir alanda indeksleme, verileri yarıya bölerken, 1000'lik bir asaletme yaklaşık 1000 kayıt döndürdü. Böyle düşük bir otorite ile, etkinlik doğrusal bir düzeye indirgenir ve sorgu eniyileyici, endeksin rekor sayının% 30'undan daha az olması durumunda indeksin kullanılmasını engeller, bu da indeksin alan boşluğunu yaratır.


2852
2017-08-04 10:41



veri benzersiz olduğunda ikili arama yapılabilir, değil mi? Minimum kardinalitenin önemli olduğunu belirttiğiniz halde, algoritma basit bir ikili arama olmaz, bu yaklaşım (~ log2 n) işlem süresini nasıl etkiler? - shampoo
@AbhishekShivkumar: Büyük soru! Dizin tablosunun veri tablosunda olduğu kadar çok satırı olacağına inanıyorum. Ve bu alan sadece 2 değere sahip olacak (true / false ile boolean) ve doğru değeri olan bir kayıt istediğinizi söyleyebilesiniz, o zaman sonuç kümesini sadece ilk geçişte yarıda bırakabilirsiniz, ikinci geçişte tüm kayıtlarınız doğrudur. ayırt etmek için bir temel yok, artık veri tablosunu lineer tarzda aramak zorundasınız, o yüzden endeksli sütuna karar verirken kardinalitenin dikkate alınması gerektiğini söyledi. Bu durumda, böyle bir sütuna endekslemek için değersizdir. Umarım haklıyım :) - Saurabh Patil
ortalama durumda blok erişim sayısı olmamalıdır (N+1)/2. Mümkün olan tüm durumlar için blok erişim sayısını toplayıp, vaka sayısına göre bölersek, o zaman N*(N+1)/(2*n) hangi çıkıyor (N+1)/2. - ajay
Bence bu cevapta birkaç yazım var, örneğin, cümlede: "endekslenmemiş tablonun ihtiyacı olan 277,778 blok erişiminden çok uzak." yazar 1.000.000 blok erişim anlamına gelmiyor mu? 277,778, indeksin kendisi tarafından istenen blok sayısıdır. Bir kaç başka yanlışlık da var gibi görünüyor :( - jcm
Jcm, "İndeksleme bölümü nedir" diye açıkladı - "Dizin Oluşturma, birden çok alanda bir dizi kaydı ayırmanın bir yoludur. Tablodaki bir alanda bir dizin oluşturmak, alan değerini ve işaretçisini tutan başka bir veri yapısı oluşturur. Bu endeks yapısı daha sonra sıralanır, bu da Binary Aramalar'ın üzerine uygulanmasına izin verir. " - grinch


İlk okuduğumda bana çok yardımcı oldu. Teşekkür ederim.

O zamandan beri indeksleri oluşturma konusunda bir miktar fikir kazandım: eğer bir masaya yazarsanız (UPDATE veya INSERT) bir endeksle, aslında dosya sisteminde iki yazma işlemi var. Tablo verileri için bir diğeri ise indeks verisi için (ve buna başvurulduğunda (ve - eğer kümelenmişse - tablo verilerinin kullanılması)). Tablo ve dizin aynı sabit diskte bulunuyorsa, bu daha fazla zamana mal olur. Böylece bir endeks (yığın) olmayan bir tablo, daha hızlı yazma işlemlerine izin verir. (eğer iki endeksiniz varsa, üç yazma işlemi ile sonuçlanırsınız, vb.)

Ancak, indeks verileri ve tablo verileri için iki farklı sabit disk üzerinde iki farklı konum tanımlamak, zamanın artan maliyetini azaltabilir / ortadan kaldırabilir. Bu, istenen dosyalara göre istenen dosya gruplarının tanımlanmasını ve istenen şekilde tablo / dizin konumunun tanımlanmasını gerektirir.

İndekslerle ilgili bir başka problem, veri eklendikçe zaman içinde parçalanmasıdır. REORGANIZE yardımcı olur, bunu yapmak için rutinleri yazmalısınız.

Bazı senaryolarda, bir yığın, dizinli bir tablodan daha yararlıdır.

Örneğin: - Çok sayıda rakip yazışmanız varsa, ancak yalnızca bir gece raporlamak için iş saatlerinin dışında okuyabilirsiniz.

Ayrıca, kümelenmiş ve kümelenmemiş dizinler arasındaki bir ayrım daha önemlidir.

Bana yardımcı oldu:- Kümelenmiş ve Kümelenmemiş dizin aslında ne anlama geliyor?


176
2018-04-30 14:31



Sanırım bu endeksleme sorunları, tıpkı Üstat ve Köle gibi, iki farklı veritabanını koruyarak çözülebilir. Master, kayıt eklemek veya güncelleştirmek için kullanılabilir. İndeksleme olmadan. Ve köle doğru indeksleme ile okumak için kullanılabilir ??? - bharatesh
Hayır, yanlış, üzgünüm. sadece tabloların içeriği güncellenmeli, aynı zamanda indeks yapısı ve içeriği de (b-tree, nodes). Efendi ve köle kavramınız burada hiçbir anlam ifade etmiyor. ne yapılabilir ki, bu iş yükünü ilk veritabanından uzaklaştırmak için analitiklerin gerçekleştirildiği ikinci bir veritabanına kopyalamak veya yansıtmak da mümkündür. ikinci veritabanı veri kopyalarını tutacaktı ve bu verilere ait indeksler. - Der U
Ya ...! Yorumumu okumayı ve düzgün bir şekilde anlamaya çalış. Aynı zamanda şunu da söyledim, master ve köle (her ne olursa olsun) “ikinci veritabanına veri tabanından uzaklaşmak için analitik işlemlerin gerçekleştirildiği ikinci bir veritabanına epikleme veya yansıtma” olarak değindim ve ikinci veritabanında veri ve dizinlerin kopyalarını tutacağım. bu veri " - bharatesh
İkinci veritabanı - hangi yansıtma veya çoğaltma yapıldıysa, köle - ilk veriyi yaptığı gibi tüm veri işlemlerini yaşayacaktır. Her dml işleminde, bu ikinci veritabanındaki dizinler "bu endeksleme sorunları" yaşayacaktır. Buradaki kazancı görmüyorum, endekslerin gerekli olduğu ve hızlı analiz için oluşturulduğu yerlerde güncel tutulmaları gerekiyor. - Der U


Bir indeks, 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 bir hash tablosudur, ancak başka bir mantıksal yapı olabilir.

Daha fazla bilgi için şunları tavsiye ederim: Veritabanı dizinleri nasıl çalışır? Ve, dizinler nasıl yardımcı olur?


131
2018-02-20 14:40



Bu listeleme için bir milyonun bir katına kadar, bu listeyi, indekslemenin temel olarak ne olduğuyla ilgili basit bir açıklama bulmaya çalışırken buldum. - Josh Burson


Ş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'

Bir endeks olmadan ne olur?

Veritabanı yazılımı, bu satırdaki Employee_Name öğesinin "Abc" olup olmadığını görmek için tam anlamıyla Çalışan tablosundaki her bir satıra bakmalıdır. Ve, her satırın içinde ‘Abc’ adıyla olmasını istediğimizden, sadece bir satır ‘Abc’ ismiyle bir kez bulduktan sonra duramayız, çünkü isimle başka satırlar da olabilir ABC. Yani, son sıraya kadar her satır aranmalıdır - yani bu senaryodaki binlerce satır, "Abc" ismiyle satırları bulmak için veri tabanı tarafından incelenmelidir. Bu bir denir tam tablo taraması

Bir veritabanı dizini performansa nasıl yardımcı olabilir?

Bir endekse sahip olmanın bütün noktası, incelenecek bir tablodaki kayıtların / satırların sayısını büyük ölçüde azaltarak arama sorgularını hızlandırmaktır. Bir indeks, bir tabloda belirli bir sütunun değerlerini saklayan bir veri yapısıdır (çoğunlukla bir B-ağacı).

B-ağaçları endeksi nasıl çalışır?

B-ağaçlarının indeksler için en popüler veri yapısı olmasının nedeni, zaman açısından verimli olmalarıdır - çünkü aramalar, silmeler ve eklemeler logaritmik zamanda yapılabilir. Ve B-ağaçlarının daha yaygın olarak kullanıldığı bir başka ana neden, B-ağacında saklanan verilerin sıralanabilmesidir. RDBMS, tipik olarak, bir dizin için hangi veri yapısının fiilen kullanıldığını belirler. Ancak, bazı RDBMS'lere sahip bazı senaryolarda, aslında dizinin kendisini oluştururken veritabanınızın kullanmasını istediğiniz veri yapısını belirtebilirsiniz.

Bir karma tablosu endeksi nasıl çalışır?

Hash indekslerinin kullanılmasının nedeni, hash tablolarının sadece değerlere bakıldığında son derece etkili olmasıdır. Dolayısıyla, eşitliği bir dizeyle karşılaştıran sorgular, bir karma dizini kullanırlarsa değerleri çok hızlı alabilir.

Örneğin, daha önce tartıştığımız sorgu, Employee_Name sütununda oluşturulan bir karma dizinden yararlanabilir. Bir karma dizinin işleyiş biçimi, sütun değerinin, hash tablosuna anahtar olması ve bu anahtarla eşlenen gerçek değerin, tablodaki satır verilerine bir gösterici olmasıdır. Bir karma tablosu temel olarak bir ilişkilendirici dizi olduğundan, tipik bir giriş, "Abc => 0x28939" gibi bir şeye benzeyecektir; burada 0x28939, Abc'nin bellekte depolandığı tablo sırasına bir başvurudır. Bir hash tablosu dizininde “Abc” gibi bir değere bakmak ve bellekteki sıraya bir başvuru geri almak, Employee_Name sütununda “Abc” değeri olan tüm satırları bulmak için tabloyu taramaktan çok daha hızlıdır.

Bir karma dizinin dezavantajları

Karma tablolar, veri yapıları sıralanmaz ve karma indekslerin bile yardımcı olamayacağı birçok sorgu türü vardır. Örneğin, 40 yaşın altında olan tüm çalışanları öğrenmek istediğinizi varsayalım. Bunu bir karma tablo endeksi ile nasıl yapabildin? Eh, bir karma tablo sadece anahtar değer çiftleri aramak için iyi çünkü bu mümkün değildir, yani eşitlik kontrol sorguları anlamına gelir

Bir veritabanı dizininin içinde tam olarak ne var? Yani, artık bir tablodaki bir sütun üzerinde bir veritabanı dizininin yaratıldığını ve indeksin bu belirli sütundaki değerleri sakladığını biliyorsunuz. Ancak, bir veritabanı dizininin değerleri aynı tablonun diğer sütunlarında sakladığı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 saklanmadığı anlamına gelir. Dizindeki diğer tüm sütunları depoladığımızda, tüm masanın başka bir kopyasını oluşturmak gibi olurdu - bu da çok fazla yer kaplar ve çok verimsiz olur.

Bir veritabanı bir endeksi ne zaman kullanacağını nasıl biliyor? "SELECT * FROM Çalışan WHERE Employee_Name =‘ Abc "gibi bir sorgu çalıştırıldığında, veritabanı sorgulanacak sütun (lar) üzerinde bir dizin olup olmadığını kontrol eder. Employee_Name sütununda bir dizin oluşturulduğunu varsayarsak, veritabanı, aranan değerleri bulmak için dizini kullanmanın gerçekten mantıklı olup olmayacağına karar vermek zorunda kalır - çünkü veritabanı dizinini kullanmak için aslında daha az verimli olduğu bazı senaryolar vardır ve tüm tabloyu taramak için daha verimli.

Bir veritabanı dizinine sahip olmanın maliyeti nedir?

Bu yer kaplar - ve masanız ne kadar büyükse, indeksiniz o kadar büyük olur. Dizinler ile gerçekleştirilen bir başka performans da, karşılık gelen tabloda satır eklediğinizde, sildiğinizde veya güncelleştirdiğinizde, aynı işlemlerin dizininize yapılması gerektiğidir. Endeksin, endeksin kapsadığı tablo sütunlarında ne varsa olduğu gibi, dakika verilerine kadar aynı şeyi içermesi gerektiğini unutmayın.

Genel kural olarak, bir endeks sadece endeksli sütundaki verilerin sık sık sorgulanacağı bir tabloda oluşturulmalıdır.

Ayrıca bakınız

  1. Hangi sütunlar genellikle iyi endeksler oluşturur?
  2. Veritabanı dizinleri nasıl çalışır?

94
2017-08-13 18:36



"bir veritabanı dizini değerleri diğer sütunlarda saklamıyor" - doğru değil. - mustaccio
@mustaccio: Dizin, yalnızca dizinlenmiş sütunlarla satırın referansını depolar (bildiğim kadarıyla). Yanlış olabilirim. Dizin diğer sütun değerlerini depolayan herhangi bir referans var mı? - Somnath Muluk
@ Down Downvoters: Sadece neyin yanlış olduğunu açıklayabilir miyim, böylece geliştirebilir miyim? - Somnath Muluk
Örneğin SQL Server kümeleme indekslerini veya DB2'leri kontrol edin CREATE INDEX ... INCLUDE fıkra. Benim görüşüme göre cevabınızda çok fazla genellem var. - mustaccio
@mustaccio: Yani varsayılan olarak create index diğer sütunları ve neden gerektiğini içermez. If we did just store all the other columns in the index, then it would be just like creating another copy of the entire table, which would take up way too much space and would be very inefficient.. Bu, dizinlerin daha genelleştirilmiş sürümüdür. CREATE INDEX ... INCLUDE diğer sütunları dikkate alarak daha yeni bir versiyon. Gönderdiğim Post daha genel versiyonunu düşünüyor. Tüm veritabanlarını dikkate alırsak, dizinler nasıl bir kitap olurdu? Öyle değil mi? Cevabın düşüşü hak ettiğini düşünüyor musunuz? - Somnath Muluk


Klasik örnek "Kitaplarda İndeks"

100 sayfalık bölünmüş, 1000 sayfadan oluşan bir "Kitap" düşünün.

Basit mi?

Şimdi, bir dizin sayfası olmadan, "S" harfi ile başlayan belirli bir bölüm bulmak için, tüm kitap taramaktan başka bir seçeneğiniz yoktur. yani: 1000 sayfa

Ama başlangıçta bir dizin sayfası ile oradasınız. Ve daha önemlisi, önemli olan herhangi bir bölümü okumak için, her seferinde tekrar tekrar dizin sayfasına bakmanız gerekir. Eşleşen indeksi bulduktan sonra diğer bölümleri atlayarak etkin bir şekilde bölüme atlayabilirsiniz.

Ama sonra, 1000 sayfaya ek olarak, indeks sayfasını görüntülemek için başka bir 10 sayfaya ihtiyacınız olacak, yani toplam 1010 sayfa.

Bu nedenle, indeks, dizinlenmiş sütun + işaretçi değerlerini, verimli aramalar için sıralanmış sırayla dizinlenmiş satıra depolayan ayrı bir bölümdür.

Okullarda işler basit, değil mi? : P


86
2018-04-23 14:43



gerçekten güzel bir benzeşim! komik bir kitap indeksi ve bir db indeksi arasındaki bağlantıyı yapmadım - Yolo Voe
Hızlı bir anlayış için güzel açıklama: D - ndh103


Basit Açıklama !!!!!!!!!!

Dizin, bir tablodaki belirli bir sütunun değerlerini saklayan bir veri yapısından başka bir şey değildir. Bir tablonun bir sütununda bir dizin oluşturulur.

Örneğin, Üç sütunlu Kullanıcı adı verilen bir veritabanı tablosu var - Ad, Yaş ve Adres. Kullanıcı tablosunun binlerce satır olduğunu varsayalım.

Şimdi, "John" olarak adlandırılan kullanıcıları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ı, bu satırın Adının "John" olup olmadığını görmek için, Kullanıcı tablosundaki her bir satıra bakmak zorundadır. Bu uzun zaman alacaktır.
Burada dizin, "indeks, incelenecek bir tablodaki kayıtların / satırların sayısını büyük ölçüde azaltarak arama sorgularını hızlandırmak için kullanıldığında" yardımcı olur.
Bir dizin nasıl oluşturulur

CREATE INDEX name_index
ON User (Name)

Bir indeks bir tablodaki sütun değerlerinden (Örn: Yuhanna) oluşur ve bu değerler bir veri yapısında saklanır.
Şimdi veritabanı John adında çalışanlar bulmak için endeksi kullanacak çünkü dizin muhtemelen kullanıcılar tarafından alfabetik olarak sıralanacaktır. Ve, sıralandığı için, bir ismin aranması çok daha hızlıdır çünkü “J” ile başlayan tüm isimler indekste yan yana olacaklardır!


47
2017-08-02 01:30





Sadece hızlı bir öneri .. Ek endeksleme ve depolama alanı endeksleme maliyetleri olarak, bu yüzden uygulamanız daha fazla ekleme / güncelleme işlemi gerektiriyorsa, tabloları dizinsiz kullanmak isteyebilirsiniz, ancak daha fazla veri alma işlemi gerektiriyorsa, endekslenmeli tablo.


21
2018-01-14 06:44



Bu bir yorum, bir cevap değil. - RonJohn


Veritabanı İndeksini bir kitabın Dizini olarak düşünün.  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. Ancak bu elbette zaman alıcıdır ve çok fazla değildir. hızlı. Diğer bir seçenek ise, kitabın Dizin bölümüne gidip, aradığınız şeyi (bu örnekte Alman Çobanları) adını kullanarak aradığınızı bulmanız ve ayrıca sayfa numarasına bakmanızdır. aradığınızı hızlıca bulabilirsiniz. Veritabanı'nda, sayfa numarası, veritabanını, varlığın bulunduğu diskteki adrese yönlendiren bir işaretçi olarak adlandırılır. Aynı Alman Çoban benzetmesini kullanarak, böyle bir şey ("Alman Çoban", 0x77129) olabilir, burada 0x77129 Alman Çoban için satır verilerinin saklandığı diskteki adrestir.

Kısaca, bir indeks, sorgu aramasını hızlandırmak için bir tabloda belirli bir sütunun değerlerini saklayan bir veri yapısıdır.


16
2017-12-21 17:16





SQL dizini, SQL veritabanında arama hızlandırmak için ilgili bir şeydir. Index, programcının veri tabanından veriyi çok hızlı almasına izin verir. Bir öğrenci veya kitap okuyucu olduğunuzu varsayalım. Kitabınız 50.000 sayfa içeriyor. Ertesi gün “ABC” bir sonraki gün okuyorsunuz, “xyz” başka bir konu okumak istersiniz. Asla sayfadan manüel olarak hiç bir sayfaya gitmeyeceksiniz. Bu durumda yapacağınız şey, belirli bir konuya bakmak için Kitap dizini kullanmak ve sonra doğrudan konuya atlamaktır. Index, arama konusuna zaman ayırdı. SQL dizininde de aynı olan Index, milyonlarca kaydın veritabanından çok hızlı bir şekilde aranmasını sağlar.


10
2018-02-15 10:17





Bir veri tabanı indeksi, veri tabanı yapısını korumak için ek yazma ve depolama alanı maliyetinde bir veritabanı tablosundaki veri alma işlemlerinin hızını artıran bir veri yapısıdır. Dizinler, her veritabanı tablosuna her erişildiğinde, her satırda bir veritabanında arama yapmak zorunda kalmadan verileri bulmak için kullanılır. Dizinler, hem hızlı rastgele aramaların hem de sıralı kayıtların verimli erişiminin temelini sağlayan bir veritabanı tablosunun bir veya daha fazla sütunu kullanılarak oluşturulabilir.


1
2017-07-09 05:33