2011-11-08 12 views
5

Sadece bir soru. Web sitelerimden önemli ölçüde daha yavaş oldu. 30k satırda 30 saniyeden fazla süren çekimler. Sorgulamaların optimize edilmediğini söylemeliyim, böylece 10k sorguları kovulabilir ama yine de bunu çok uzun sürdüğünü görüyorum ... Yani indeksleri kontrol edelim. 'Problem' tablolarından bazılarını görüntüledikten sonra indekslemenin birden çok sütun üzerinde yapıldığını gördüm, ancak kardinalite sadece 1 sütun üzerinde gösteriliyor ve diğer indeksler 0 seviyesine sahip.MySQL mağazası dizinleri nasıl?

Yanlış dizinler yaptım mı? Diğer bir deyişle, onları birleştirmek yerine her sütun için bir indeks yapmalı mıyım?

+2

bu alanları hepsi aynı değerleri var mı? – GolezTrol

+0

Sorun yaşadığınız sorguları bulmak için yavaş oturum açmayı etkinleştirmeniz, EXPLAIN yoluyla çalıştırmanız ve sonuçları burada veya yeni bir soru olarak göndermeniz gerekir. – hafichuk

+0

Hayır, sadece 1 alan. Bu ekran görüntüsüne örnek olarak bakın: http://imageshack.us/f/812/schermafbeelding2011110kj.png/ Bu, şu an için 35.721 satır içeren bir rezervasyon tablosudur. – Ben

cevap

3

Yanlış dizinler oluşturduğunuz neredeyse kesin. Çoğu insan yapar!

Birden çok sütun üzerinde tek tek sütunlara karşı dizin oluşturmanın bir kuralı yoktur. Oluşturulacak en iyi dizinler, veritabanınızın şeması değil, çalıştırdığınız sorgulara bağlıdır.

Sorguları incelemek ve dizinlere karar vermek titiz bir işlemdir. Belirli bir sorgunun mevcut dizinleri nasıl kullandığını görmek için EXPLAIN'u kullanabilirsiniz. dokümanlar mutlaka okuyun:

+0

Cevabınız için teşekkür ederiz. Tablolardaki verileri filtrelemek için en çok kullanılan sütunlarda dizin oluşturmam gerektiğini biliyorum. Ekran görüntüsündeki sütunlar (başlangıç ​​sayfasındaki yorumlara bakın) en çok kullanılanlardır. Bağlantıları için teşekkürler, EXPLAIN sözdizimini kullanmaya alışkınım. :) – Ben

İlgili konular