2014-07-14 26 views
6

Bunu birkaç kez gördüm ama EXPLAIN sorgu planını yanlış yorumlayabilirim.Mysql'de, kullanılmayan dizinler neden sorgu planını etkiler?

Sanırım bir tablom var (col1, col2). Hem col1 hem de col2'de başka bir tabloyla birleştirmek istiyorum. Yani bir dizin oluşturuyorum (col1, col2). Bazen, EXPLAIN, dizinin kullanılmadığını gösterir. Belki başka bir verimsiz indeks kullanılır ya da hiç yok.

Başka bir dizin (col1) oluşturursam, ilk dizin (col1, col2) kullanılır.

Daha önce bunlara hiç kimsenin başına gelen oldu mu? Bunun neden olabileceği hakkında bir fikrin var mı?

Benim teorim, kullanılmayan dizinin, ilk dizini kullanmak için sorgu planına işaret eden tablo hakkında daha kesin istatistikler sağlamasıdır. Ama bunun doğru olup olmadığını ya da nasıl kanıtlayacağını anlamak için mysql'in iç işleyişine yeterince aşina değilim.

cevap

2

ben Gördüğünüz davranışta bir faktör olduğuna inandığımız endeks önem düzeyi, yenilemek için üzerine ANALYZE TABLE çalıştırmak için gerekli olabilir ALTER TABLEstates için MySQL dokümantasyonu. Ayrıca, sorgu iyileştiricisi genellikle boş (veya yakın) boş tabloları, dolu tablolardan oldukça farklı işler ve yalnızca birkaç satır olduğunda bir dizin kullanmak yerine tam bir tablo taraması yapar. $work adresindeki kendi geliştirmemden dolayı dev veritabanımın EXPLAIN çıktısına güvenemem.

+0

Bu mantıklıdır. Maalesef, veri tabanım, sorguları ve dizinlerimle sorunu yeniden oluşturamıyorum - muhtemelen veri istatistikleri kullanım sırasında güncellendi. Bu doğru cevap gibi görünüyor, ancak verilerimle kanıtlayamıyorum. Başkalarına cevap verme şansı vereyim, ama bu doğru görünüyor. – kane

İlgili konular