Raymond Nijland tarafından soru üzerine yapılan yorumlardan oluşturulan Topluluk Wiki yanıtı
Kullanın EXPLAIN
. Bu şekilde, bir sorgunun disk IO'suna ihtiyacı olup olmadığını görebilirsiniz. Sütun içinde kaçınmak gerekir ekstra "geçici kullanma" "geçici kullanma" ya; Filesort kullanma (filesort'un yanıltıcı bir isim olduğunu unutmayın: sonuç kümesi belleğe sığarsa, quicksort bellekte çalıştırılır) ".
Bunun nedeni büyük olasılıkla alt sorgular / sendikalar / / by by group by / ... sonucunuz büyükse ve MyISAM disk tabanlı geçici bir tablo oluşturulmuşsa ve sonucu sıralamanız gerekiyorsa, sonucu sıralıyorsunuz hızlı okuma algoritması ile IO okuma ve IO yazma dayalı set.
MySQL'de Dahili Geçici Tablo Kullanımı bölümünde, MySQL'in disk tabanlı bir MyISAM tablosu oluşturması gerektiğinde okuyabilirsiniz. Sonucun yığına uyup uymadığını kontrol etmek için avg_row_length * satırlarını kullanabilirsiniz ( açıklamanın satır değerinin InnoDB motoru ile tam olmadığını unutmayın ). Bkz . TABLO DURUMUNU GÖSTER Sözdizimi .
Genel olarak G / Ç isteklerinden kaçınmak için InnoDB veya MyISAM daha iyi midir?
InnoDB tablo verilerini ve dizin verilerini arabelleğe alırken, MyISAM yalnızca dizin anahtarlarını arabelleğe alır. Fazladan açıklama sütunu "Dizin kullanma" demediğinde tablo verilerine bir G / Ç gereklidir .
Her ikisi de dizin kullanıyorsa: InnoDB ile, arabellek sıcaksa bellekten veri yükleyebilir. Dizinlerin diskten gelmesi gerekiyorsa, seçmeler, ekler ve güncellemeler için gerekli G / Ç okumalarını hesaplamak için kullanabileceğiniz bir formül vardır. Gönderen Tahmin Sorgu Performansı :
Küçük tablolar için, genellikle bir disk aramasında bir satır bulabilirsiniz (dizin büyük olasılıkla önbelleğe alınmış olduğundan). Daha büyük tablolar için, B-ağacı dizinlerini kullanarak, bir satır bulmak için bu kadar çok aramaya ihtiyacınız olduğunu tahmin edebilirsiniz:
log(rows) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1
InnoDB dizinleri, PRIMARY / UNIQUE anahtarındaki verileri bir KEY dizinine depoladığından daha büyüktür. Bu daha hızlıdır ve daha az IO arar, ancak InnoDB verilerini veya dizinlerini sıkıştırabilirsiniz.