Bu sorunun bazı cevaplarına katılmıyorum.
Çok fazla dizin diye bir şey var mı?
Elbette. Sorgularınızın hiçbiri tarafından kullanılmayan dizinler oluşturmayın. Gereksiz dizinler oluşturmayın. İhtiyaç duymadığınız dizinleri keşfetmenize yardımcı olması için pt-duplicate-key-checker ve pt-index-usage gibi araçları kullanın .
Dizinler neler hızlandıracak?
- WHERE yan tümcesinde arama koşulları.
- Katılım koşulları.
- Bazı ORDER BY vakaları.
- Bazı GROUP BY durumları.
- EŞSİZ kısıtlamalar.
- FOREIGN KEY kısıtlamaları.
- FULLTEXT araması.
Diğer yanıtlar, ne kadar çok dizine sahipseniz, INSERT / UPDATE / DELETE'in daha yavaş olduğunu belirtmiştir. Bu doğru, ancak birçok UPDATE ve DELETE kullanımının WHERE cümlelerine sahip olduğunu ve MySQL'de UPDATE ve DELETE'in de JOIN'leri desteklediğini düşünün. Dizinler, bu sorgulara, dizinleri güncelleme ek yükünü telafi etmekten daha fazla fayda sağlayabilir.
Ayrıca InnoDB, GÜNCELLEME veya SİLME'den etkilenen satırları kilitler. Buna satır düzeyinde kilitleme diyorlar, ancak bu gerçekten dizin düzeyinde kilitleme. Aramayı daraltacak bir dizin yoksa, InnoDB'nin değiştirdiğiniz belirli satırdan çok daha fazla satırı kilitlemesi gerekir. Tablodaki tüm satırları bile kilitleyebilir . Bu kilitler, mantıksal olarak çakışmasalar bile diğer istemciler tarafından yapılan değişiklikleri engeller.
Bir dizin eklemek ne zaman iyi bir fikirdir?
Yukarıdaki durumlardan birinde bir dizinden yararlanacak bir sorgu çalıştırmanız gerektiğini biliyorsanız.
Bir dizin eklemek ne zaman kötü bir fikirdir?
Dizin, başka bir mevcut dizinin sol önekiyse veya dizin, çalıştırmanız gereken sorguların hiçbirine yardımcı olmuyorsa.
Pro ve Con'lar çoklu indeksler mi yoksa çok sütunlu indeksler mi?
Bazı durumlarda, MySQL dizin birleştirme optimizasyonu gerçekleştirebilir ve bağımsız dizin aramalarından elde edilen sonuçları birleştirebilir veya kesiştirebilir. Ancak, tek bir dizin tanımlamak daha iyi performans sağlar, böylece dizin birleştirmenin yapılmasına gerek kalmaz.
Danışmanlık müşterilerimden biri için, indeksin bulunmadığı çoktan çoğa bir tabloda çok sütunlu bir dizin tanımladım ve birleştirme sorgusunu 94 milyon kat artırdım!
Doğru dizinleri tasarlamak, optimize etmeniz gereken sorguları temel alan karmaşık bir süreçtir . Güncellemeleri yavaşlatmamak için "her şeyi dizine ekle" veya "hiçbir şeyi dizine eklememelisiniz"
Ayrıca , Gerçekten Dizinler Nasıl Tasarlanır adlı sunumuma bakın .