2009-01-13 23 views
5

ORM'nin güzelliği beni bir uyku uykusuna itti. Veritabanı dizin eksikliğiyle mevcut bir Django uygulamasına sahibim. İndekslemeye ihtiyaç duyan sütunların bir listesini otomatik olarak oluşturmanın bir yolu var mı?İndekslemeye ihtiyaç duyan sütunların bir listesini otomatik olarak oluşturmanın bir yolu var mı?

WHERE maddelerinde hangi sütunların yer aldığını kaydedebilecek bazı ara katmanları düşünebilirmiydim? ama MySQL'in içinde yardımcı olabilecek herhangi bir şey var mı?

cevap

4

Evet, var. Eğer slow query log bir göz atacak olursak

, orada da ekler yavaşlatacaktır tüm "yavaş" sorgulara ister istemez dizinleri ekleme Bir seçenek seçme --log-queries-not-using-indexes

+0

Belirtilen ara katman gibi daha genel çözümlerle ilgili herhangi bir gönderi yok. – ohnoes

+0

Yukarıda belirtilen ara yazılım yalnızca dizinler için aday olan sütunları gösterirken, yavaş sorgu günlüğü size gerçek önerileri gösterir (MySQL'e özgü sunucu optimizasyonları nedeniyle farklı olabilir). – zgoda

4

sayılı

, güncellemeler var ve siler.

Dizinler, hızlı sorgular ve hızlı değişiklikler arasındaki dengeleme eylemidir. Genel veya "doğru" bir cevap yoktur. Bunu otomatikleştirecek hiçbir şey kesinlikle yok.

Dizin eklediğinizde ve değiştirdiğinizde tüm uygulama genelinde geliştirmeyi ölçmeniz gerekir.

+0

Birçok web uygulamasında olduğu gibi benim durumumda read-heavy - yazmalar sadece admin ve tablo boyutu oldukça küçük. Bu durumda, aramalarda kullanılan tüm sütunlara dizin eklemenin faydalı olacağını kabul eder misiniz? –

+0

@andybak: Willy-Nilly endeksleme kötü bir plandır. Bazı indeksler iyi bir fikir gibi görünebilir ancak gerçek faydaya sahip olmalıdır. İki kural: (1) Bir Zamanda Tek Bir Şey Değiştirmek; (2) Öncesi ve Sonrası Ölçme. Asla silahsız bir sürü değişiklik ve umut. –