2009-06-19 19 views
7

Czy ktoś może mi powiedzieć co on jest lepszy appraoch w MySQL Whin chodzi o znalezienie liczbę wierszy w tabeli: lepiej jest robićUzyskiwanie liczby wierszy dla tabeli w MySQL?

SELECT COUNT(*) FROM TABLE_NAME 

lub patrzeć liczbę wierszy w tabeli TABLE w INFORMATION_SCHEMA?

Jest to częsta operacja do obliczania liczników stronicowania dla stron?

Należy dodać, że tabele będą miały najwyżej kilka tysięcy wierszy.

Dzięki

Martin O'Shea.

+0

Dla kilku tysięcy wierszy liczba zaznaczeń (*) będzie działać niemal natychmiastowo. – Hardwareguy

Odpowiedz

18

W MyISAM, to zapytanie:

SELECT COUNT(*) 
FROM TABLE_NAME 

jest natychmiastowy, ponieważ jest przechowywane w metadanych tabeli, więc jest to prawie za darmo do wydawania tej kwerendy i będzie zawsze uzyskać poprawny wynik.

W tym przypadku zapytanie zlicza wiersze jeden po drugim, co może trochę potrwać.

Jeśli więc nie potrzebujesz dokładnej wartości COUNT(*), możesz wysłać zapytanie INFORMATION_SCHEMA.

+1

Myślę, że biorąc pod uwagę, że muszę obliczyć paginację za pomocą liczby wierszy/liczby stronicowania, na tabelach InnoDB najlepiej jest użyć INFORMATION_SCHEMA. Zliczanie zajmie tylko milisekundy, ale nadal jest to kosztowne, jeśli wielu użytkowników uzyskuje dostęp do tej samej tabeli podczas przeglądania. –

+0

@MartinOShea: dokładnie – Quassnoi

+0

Dzięki za pomoc. –

1

Rozważę również użycie SQL_CALC_FOUND_ROWS i SELECT FOUND_ROWS(), jeśli uznasz, że COUNT(*) jest zbyt wolny.

Powiązane problemy