Câu trả lời Wiki cộng đồng được tạo ra từ các bình luận về câu hỏi của Raymond Nijland
Sử dụng EXPLAIN
. Bằng cách này bạn có thể thấy nếu một truy vấn CÓ THỂ cần đĩa IO. Bạn cần tránh trong cột thêm "Sử dụng tạm thời" hoặc "" Sử dụng tạm thời; Sử dụng tập tinortort (lưu ý tập tin tập tin là một tên sai lệch: nếu tập kết quả phù hợp với bộ nhớ, quicksort được chạy trong bộ nhớ) ".
Điều này rất có thể được gây ra bởi các truy vấn con / hiệp hội / thứ tự theo / nhóm bởi / ... Nếu kết quả của bạn lớn và bảng tạm thời dựa trên đĩa MyISAM được tạo và bạn cần sắp xếp kết quả, bạn đang sắp xếp kết quả thiết lập dựa trên IO đọc và IO ghi với thuật toán quicksort.
Trong Bảng tạm thời nội bộ Sử dụng trong MySQL, bạn có thể đọc khi MySQL cần tạo bảng MyISAM dựa trên đĩa. Có lẽ bạn có thể sử dụng các hàng avg_row_length * (mặc dù lưu ý rằng giá trị hàng từ giải thích không chính xác với công cụ InnoDB) để kiểm tra xem kết quả có khớp với heap không. Xem Cú pháp SHOW TABLE STATUS .
Nói chung là InnoDB hoặc MyISAM tốt hơn để tránh các yêu cầu I / O?
InnoDB sẽ đệm dữ liệu bảng và dữ liệu chỉ mục, trong khi MyISAM chỉ đệm các khóa chỉ mục. Cần có I / O cho dữ liệu bảng khi giải thích thêm cột không nói "Sử dụng chỉ mục".
Nếu cả hai đều sử dụng chỉ mục: Với InnoDB, nếu bộ đệm nóng, nó có thể tải dữ liệu từ bộ nhớ. Nếu các chỉ mục cần đến từ đĩa, có một công thức mà bạn có thể sử dụng để tính toán các lần đọc IO cần thiết cho các lựa chọn, chèn và cập nhật. Từ ước tính hiệu suất truy vấn :
Đối với các bảng nhỏ, bạn thường có thể tìm thấy một hàng trong một đĩa tìm kiếm (vì chỉ mục có thể được lưu trong bộ nhớ cache). Đối với các bảng lớn hơn, bạn có thể ước tính rằng, bằng cách sử dụng các chỉ mục cây B, bạn cần nhiều tìm kiếm này để tìm một hàng:
log(rows) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1
Các chỉ mục của InnoDB lớn hơn vì nó lưu trữ dữ liệu từ khóa CHÍNH HÃNG / ĐỘC ĐÁO thành một chỉ mục KEY. Điều này nhanh hơn và cần ít hơn IO tìm kiếm nhưng bạn có thể nén dữ liệu hoặc chỉ mục của InnoDB.