Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:il modo più veloce per contare il numero di righe

Quando COUNT(*) prende il conteggio degli indici delle colonne, quindi sarà il miglior risultato. MySQL con MyISAM il motore memorizza effettivamente il conteggio delle righe, non conta tutte le righe ogni volta che si tenta di contare tutte le righe. (basato sulla colonna della chiave primaria)

Usare PHP per contare le righe non è molto intelligente, perché devi inviare dati da mysql a php. Perché farlo quando puoi ottenere lo stesso sul lato MySQL?

Se il COUNT(*) è lento, dovresti eseguire EXPLAIN sulla query e controlla se gli indici sono realmente utilizzati e dove dovrebbero essere aggiunti.

Quello che segue non è il più veloce modo, ma c'è un caso, dove COUNT(*) non si adatta molto bene:quando inizi a raggruppare i risultati, puoi riscontrare un problema, dove COUNT non conta davvero tutte le righe.

La soluzione è SQL_CALC_FOUND_ROWS . Di solito viene utilizzato quando si selezionano le righe ma è comunque necessario conoscere il conteggio totale delle righe (ad esempio, per il paging). Quando si selezionano le righe di dati, è sufficiente aggiungere SQL_CALC_FOUND_ROWS parola chiave dopo SELECT:

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

Dopo aver selezionato le righe necessarie, puoi ottenere il conteggio con questa singola query:

SELECT FOUND_ROWS();

FOUND_ROWS() deve essere chiamato subito dopo la query di selezione dei dati.

In conclusione, tutto in realtà si riduce a quante voci hai e cosa c'è nell'istruzione WHERE. Dovresti davvero prestare attenzione a come vengono utilizzati gli indici, quando ci sono molte righe (decine di migliaia, milioni e oltre).