Wszyscy wiedzą, że w tabelach, które używają InnoDB jako silnika, zapytania takie SELECT COUNT(*) FROM mytable
są bardzo niedokładne i bardzo wolne, szczególnie gdy tabela staje się większa i ciągłe wstawianie / usuwanie wierszy podczas wykonywania tego zapytania.
Tak jak to rozumiem, InnoDB nie przechowuje liczby wierszy w zmiennej wewnętrznej, co jest przyczyną tego problemu.
Moje pytanie brzmi: dlaczego tak jest? Czy tak trudno byłoby przechowywać takie informacje? To ważna informacja, którą należy znać w tak wielu sytuacjach. Jedyną trudnością, jaką widzę, jeśli taki wewnętrzny licznik zostałby zaimplementowany, jest zaangażowanie transakcji: jeśli transakcja jest niezatwierdzona, czy liczycie wstawione wiersze, czy nie?
PS: Nie jestem ekspertem od DB, jestem po prostu kimś, kto ma MySQL jako proste hobby. Więc jeśli tylko zapytałem o coś głupiego, nie bądź zbyt krytyczny: D.
SELECT COUNT(*) FROM ...
zapytania są dokładne. Jeśli wolisz, phpMyAdmin można skonfigurować tak, aby zawsze używał dokładnej liczby wierszy kosztem szybkości. Więcej informacji: stackoverflow.com/questions/11926259/…