Dizine ekleme konusunda kesinlikle biraz zaman harcamalısınız, bunun hakkında çok şey yazılmıştır ve neler olduğunu anlamak önemlidir.
Genel olarak, bir dizin bir tablonun satırlarına bir sıralama uygular.
Basitçe söylemek gerekirse, bir tablonun sadece büyük bir CSV dosyası olduğunu hayal edin. Bir satır eklendiğinde, sonuna eklenir . Böylece tablonun "doğal" sırası sadece satırların eklendiği sıradır.
CSV dosyasının çok basit bir e-tablo uygulamasına yüklendiğini düşünün. Bu elektronik tablonun yaptığı tek şey verileri görüntülemek ve satırları sırayla numaralandırmaktır.
Şimdi üçüncü sütunda bir miktar "M" olan tüm satırları bulmanız gerektiğini düşünün. Sahip olduklarınız göz önüne alındığında, sadece bir seçeneğiniz vardır. Her satır için üçüncü sütunun değerini kontrol ederek tabloyu tararsınız. Çok sayıda satırınız varsa, bu yöntem (bir "tablo taraması") uzun sürebilir!
Şimdi bu tabloya ek olarak bir endeksinizin olduğunu hayal edin. Bu belirli dizin, üçüncü sütundaki değerlerin dizinidir. Dizin, üçüncü sütundaki tüm değerleri, bazı anlamlı sırayla (alfabetik olarak) listeler ve her biri için, bu değerin göründüğü satır numaralarının bir listesini sağlar.
Şimdi üçüncü sütunun değerinin "M" olduğu tüm satırları bulmak için iyi bir stratejiniz var. Örneğin, bir ikili arama yapabilirsiniz ! Tablo taraması N satırı (burada N satır sayısıdır) aramanızı gerektirirken, ikili arama yalnızca en kötü durumda log-n dizin girişlerine bakmanızı gerektirir. Vay canına, bu çok daha kolay!
Tabii ki, bu dizine sahipseniz ve tabloya satır ekliyorsanız (sonunda, kavramsal tablonuz bu şekilde çalışır), her seferinde dizini güncellemeniz gerekir. Böylece, yeni satırlar yazarken biraz daha fazla iş yaparsınız, ancak bir şey ararken tonlarca zaman kazanırsınız.
Bu nedenle, genel olarak, dizin oluşturma okuma verimliliği ve yazma verimliliği arasında bir denge yaratır. Hiçbir dizin olmadan, ekler çok hızlı olabilir - veritabanı motoru tabloya sadece bir satır ekler. Dizin ekledikçe, eklemeyi gerçekleştirirken motorun her dizini güncellemesi gerekir.
Öte yandan, okumalar çok daha hızlı hale geliyor.
Umarım bu ilk iki sorunuzu kapsar (diğerlerinin yanıtladığı gibi - doğru dengeyi bulmanız gerekir).
Üçüncü senaryonuz biraz daha karmaşık. LIKE kullanıyorsanız, dizin oluşturma motorları genellikle ilk "%" değerine kadar okuma hızınıza yardımcı olur. Başka bir deyişle, 'foo% bar%' GİBİ NEREDE sütununu SEÇİYORSANIZ, veritabanı, sütunun "foo" ile başladığı tüm satırları bulmak için dizini kullanır ve ardından alt kümeyi bulmak için bu ara satır kümesini taraması gerekir "bar" içerir. SELECT ... NEREDE '% bar%' sütunu dizini kullanamıyorsa. Umarım nedenini görebilirsin.
Son olarak, birden fazla sütundaki dizinleri düşünmeye başlamanız gerekir. Konsept aynıdır ve LIKE malzemelerine benzer şekilde davranır - esas olarak, (a, b, c) üzerinde bir indeksiniz varsa, motor dizini soldan sağa mümkün olan en iyi şekilde kullanmaya devam eder. Bu nedenle a sütunundaki bir arama, (a, b) 'de olduğu gibi (a, b, c) dizinini kullanabilir. Ancak, NEREDE b = 5 VE c = 1'i ararken motorun tam tablo taraması yapması gerekir)
Umarım bu biraz ışık tutmaya yardımcı olur, ancak bunları derinlemesine açıklayan iyi makaleler için birkaç saat kazarak en iyisi olduğunuzu tekrarlamalıyım. Veritabanı sunucunuzun belgelerini okumak da iyi bir fikirdir. Endekslerin sorgu planlayıcıları tarafından uygulanması ve kullanılma şekli oldukça değişkendir.