sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Snabbaste sättet att räkna antal rader

När du COUNT(*) den tar in index för antal kolumner, så det blir det bästa resultatet. Mysql med MyISAM motorn lagrar faktiskt radantal, den räknar inte alla rader varje gång du försöker räkna alla rader. (baserat på primärnyckelns kolumn)

Att använda PHP för att räkna rader är inte särskilt smart, eftersom du måste skicka data från mysql till php. Varför göra det när du kan uppnå samma sak på mysql-sidan?

Om COUNT(*) är långsam bör du köra EXPLAIN på frågan och kontrollera om index verkligen används och var ska de läggas till.

Följande är inte det snabbaste sätt, men det finns ett fall där COUNT(*) passar inte riktigt - när du börjar gruppera resultat kan du stöta på problem, där COUNT räknar inte riktigt alla rader.

Lösningen är SQL_CALC_FOUND_ROWS . Detta används vanligtvis när du väljer rader men fortfarande behöver veta det totala radantalet (till exempel för personsökning). När du väljer datarader lägger du bara till SQL_CALC_FOUND_ROWS nyckelord efter SELECT:

SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;

När du har valt önskade rader kan du få räkningen med denna enda fråga:

SELECT FOUND_ROWS();

FOUND_ROWS() måste anropas omedelbart efter datavalsfrågan.

Sammanfattningsvis beror allt faktiskt på hur många poster du har och vad som står i WHERE-utlåtandet. Du bör verkligen vara uppmärksam på hur index används, när det finns många rader (tiotusentals, miljoner och uppåt).



  1. Hur man får det aktuella datumet i MySQL

  2. Skillnad mellan nyckel, primärnyckel, unik nyckel och index i MySQL

  3. Hur ansluter man Android-appen till MySQL-databasen?

  4. Hur man lagrar återkommande datum med tanke på sommartid