SORU
15 HAZİRAN 2010, Salı


MySQL indeksler - ne en iyi uygulamalar?

Bir süre MySQL veritabanı dizinler şimdi ama hiç düzgün kullanıyorumöğrendimonlarla ilgili. Genellikle ya WHERE bir madde kullanarak arama seçeceğim herhangi bir alan üzerinde bir dizin koydum ama bazen o kadar siyah ve beyaz gibi görünmüyor.

MySQL dizinler için en iyi uygulamalar nelerdir?

Örnek durumlar/ikilemler:

Eğer bir masa altı sütun ve tüm varsa aranabilir onları, dizin yapmalıyım hepsi ya da hiçbiri?

.

Negatif performans nedir indeksleme etkiler?

.

Eğer VARCHAR 2500 bir sütun varsa sitemin parçaları,aranabilir. endeks gerekir?

CEVAP
15 HAZİRAN 2010, Salı


Kesinlikle biraz zaman dizin üzerinde okuma harcamak gerekir, bir sürü yazılı var ve önemli neler olup bittiğini anlamak için.

Genel olarak konuşursak, ve dizin tablo satırları üzerinde bir sipariş getirir.

Basitlik aşkına, bir tablo sadece büyük bir CSV dosyası olduğunu düşünün. Bir satır takıldığında, sokuluyorsonunda. "Doğal" tablosu sipariş satırları eklenmiş sadece sırasıdır.

Bu CSV dosyası çok basit bir elektronik tablo uygulaması yüklü var düşünün. Tüm bu elektronik tablo verileri görüntülemek ve sırayla Satır Numaraları yok.

Şimdi "" üçüncü sütun. M bazı değeri olan tüm satırları bulmak için ihtiyacınız olduğunu düşünün Kullanılabilir olması göz önüne alındığında, sadece bir seçenek var. Tablo, her satır üçüncü sütun değeri kontrol tarama. Eğer çok sayıda satır varsa, bu yöntem ("") tablo taraması uzun sürebilir!

Şimdi bu tabloya ek olarak, bir dizin var düşünün. Bu belirli bir dizin üçüncü sütundaki değerleri dizinidir. Bu dizin her biri için anlamlı order (alfabetik olarak) üçüncü sütun, ve değerleri listeler, bu değeri göründüğü satır numaralarının bir listesini sağlar.

Şimdi üçüncü sütunun değeri olduğu tüm satırları bulmak için iyi bir strateji var "M". Örneğin, binary search Bir yapabilirsiniz! Oysa tablo tarama gerektirir sana bak N satır (N satır sayısı), ikili arama gerektiren bakıyorsun günlük-n dizin girişleri, çok kötü durumda. Wow, bu kesinlikle çok daha kolay!

Elbette, eğer bu dizin, ve sen ekleme satır için tablo (sondan beri böyle bizim kavramsal tablo çalışır), endeks güncelleme her zaman. Yeni satır yazma yaparken biraz daha fazla iş, ama bir şey aradığın zaman zaman bir ton tasarruf.

Yani, genel olarak, dizin oluşturma okuma etkinliği arasında bir tercih oluşturur ve verimliliği yazmak. Dizin ile, ekler çok hızlı olabilir Veritabanı Altyapısı sadece tabloya bir satır ekler. Dizinler eklemek gibi, motoru ekleme yaparken her dizin güncelleme gerekir.

Diğer taraftan, çok daha hızlı olur okur.

Umarım bu ilk iki soru (Diğerleri cevap olarak doğru dengeyi bulmak gerekir) kapsar.

Üçüncü senaryo biraz daha karmaşıktır. Eğer BÖYLE kullanıyorsanız, dizin motorlar genellikle okuma hızı ilk yardım edecektir"". % Diğer bir deyişle, Eğer sen Seçmek NEREDE sütun GİBİ 'foo�r%' veritabanı kullanır dizini bulup tüm satırları sütun ile başlar "foo" ve sonra gerek tarama, Ara satır bulmak için alt kümesini içeren "bar". Sütun GİBİ bir YERİ SEÇİN ... 'r% �' dizini kullanamaz. Neden anlıyorsundur umarım.

Son olarak, dizinler düşünerek birden fazla sütun başlamalısın. Konsept aynı, aynı şekilde davranır ve bu GİBİ şeyler essentialy, eğer bir dizin (a,b,c), motor devam edecek kullanarak dizin soldan sağa olarak iyi olabilir. Bir sütun üzerinde arama (a,b) (a,b, c) Endeksi,tek olarak kullanabilir. Ancak, motoru NEREDE arama olsaydın tam bir tablo taraması yapmak gerekir b=5 VE c=1)

Umarım bu küçük bir ışık tutar, ama en iyi bir kaç saat derinlemesine bunları anlatan iyi bir makale için kazma harcama olduğunu tekrarlıyorum. Ayrıca belirli bir veritabanı sunucunuzun belgelerine okumak için iyi bir fikirdir. İndeksler ve sorgu planlamacıları tarafından uygulanan kullanılma şekli, oldukça yaygın olarak değişebilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Barnacules Nerdgasm

    Barnacules N

    20 Temmuz 2006
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • KSI

    KSI

    25 Temmuz 2009