Jawaban komunitas Wiki dihasilkan dari komentar pada pertanyaan oleh Raymond Nijland
Gunakan EXPLAIN
. Dengan cara ini Anda dapat melihat apakah permintaan MUNGKIN membutuhkan IO disk. Anda harus menghindari di kolom tambahan "Menggunakan sementara" atau "" Menggunakan sementara; Menggunakan filesort (perhatikan filesort adalah nama yang menyesatkan: jika hasil yang diset sesuai dengan memori, quicksort dijalankan dalam memori) ".
Ini kemungkinan besar disebabkan oleh subqueries / serikat pekerja / order oleh / grup oleh / ... Jika hasil Anda besar dan tabel sementara berbasis disk MyISAM dibuat, dan Anda perlu mengurutkan hasilnya, Anda mengurutkan hasilnya diatur berdasarkan IO membaca dan IO menulis dengan algoritma quicksort.
Dalam Penggunaan Tabel Sementara Internal di MySQL Anda dapat membaca kapan MySQL perlu membuat tabel MyISAM berbasis disk. Mungkin Anda dapat menggunakan avg_row_length * rows (meskipun perhatikan bahwa nilai rows dari menjelaskan tidak tepat dengan mesin InnoDB) untuk memeriksa apakah hasilnya cocok dengan heap. Lihat SHOW TABLE STATUS Syntax .
Secara umum apakah InnoDB atau MyISAM lebih baik untuk menghindari permintaan I / O?
InnoDB akan buffer data tabel dan data indeks, sedangkan MyISAM hanya buffer kunci indeks. I / O untuk data tabel diperlukan ketika menjelaskan kolom tambahan tidak mengatakan "Menggunakan indeks".
Jika keduanya menggunakan indeks: Dengan InnoDB, jika buffer panas dapat memuat data dari memori. Jika indeks perlu berasal dari disk ada rumus yang dapat Anda gunakan untuk menghitung IO yang diperlukan dibaca untuk selektif, sisipan, dan pembaruan. Dari Memperkirakan Performa Permintaan :
Untuk tabel kecil, Anda biasanya dapat menemukan baris dalam satu pencarian disk (karena indeks mungkin di-cache). Untuk tabel yang lebih besar, Anda dapat memperkirakan bahwa, menggunakan indeks B-tree, Anda membutuhkan banyak upaya ini untuk menemukan baris:
log(rows) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1
Indeks InnoDB lebih besar karena menyimpan data dari kunci PRIMARY / UNIK ke dalam indeks KUNCI. Ini lebih cepat dan membutuhkan lebih sedikit IO mencari tetapi Anda dapat mengompresi data atau indeks InnoDB.