Odpowiedź Wiki Wiki wygenerowana z komentarzy na pytanie Raymonda Nijlanda
Zastosowanie EXPLAIN
. W ten sposób możesz sprawdzić, czy zapytanie MOŻE potrzebować dysku IO. W kolumnie należy unikać dodatkowych „Korzystanie z tymczasowych” lub „” Korzystanie z tymczasowych; Korzystanie z sortowania plików (zwróć uwagę, że sortowanie plików jest mylącą nazwą: jeśli zestaw wyników mieści się w pamięci, szybkie sortowanie jest uruchamiane w pamięci) ".
Najprawdopodobniej jest to spowodowane podkwerendami / związkami / kolejnością według / grupowania według / ... Jeśli Twój wynik jest duży i tworzona jest tymczasowa tabela dyskowa MyISAM, i musisz posortować wynik, sortujesz wynik zestaw oparty na odczytach We / Wy i zapisach We / Wy z algorytmem szybkiego sortowania.
W wewnętrznym zastosowaniu tabeli tymczasowej w MySQL możesz odczytać, kiedy MySQL musi utworzyć tabelę MyISAM opartą na dysku. Być może możesz użyć avg_row_length * wierszy (choć zauważ, że wartość wierszy z wyjaśnienia nie jest dokładna w silniku InnoDB), aby sprawdzić, czy wynik mieści się w stercie. Zobacz SKŁADANIE STATUSU TABELI .
Ogólnie rzecz biorąc, czy InnoDB lub MyISAM jest lepszy do unikania żądań We / Wy?
InnoDB buforuje dane tabeli i dane indeksu, podczas gdy MyISAM buforuje tylko klucze indeksu. Konieczne jest we / wy danych tabeli, gdy dodatkowe wyjaśnienie kolumny nie mówi „Korzystanie z indeksu”.
Jeśli oba używają indeksów: W przypadku InnoDB, jeśli bufor jest gorący, może ładować dane z pamięci. Jeśli indeksy muszą pochodzić z dysku, istnieje formuła, której można użyć do obliczenia potrzebnych odczytów We / Wy dla zaznaczeń, wstawek i aktualizacji. Z oszacowania wydajności zapytania :
W przypadku małych tabel zwykle można znaleźć wiersz w jednym poszukiwaniu dysku (ponieważ indeks jest prawdopodobnie buforowany). W przypadku większych tabel możesz oszacować, że korzystając z indeksów B-drzewa potrzeba wielu prób znalezienia wiersza:
log(rows) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1
Indeksy InnoDB są większe, ponieważ przechowują dane poza kluczem PRIMARY / UNIQUE w indeksie KEY. Jest to szybsze i wymaga jeszcze mniej operacji we / wy, ale można kompresować dane InnoDB lub indeksy.