2011-02-25 19 views
8

Ho una tabella usando innodb. So che il tavolo ha circa 89 milioni di file. Utilizzo diMySQL ottiene il numero di righe in una tabella innodb

SELECT COUNT(*) FROM table; 

richiede circa cinque minuti per l'esecuzione. So che innodb non è ottimizzato per le query COUNT (*) incondizionate. Come posso ristrutturare la query per darmi un conteggio più veloce? Vorresti solo aggiungere WHERE 1 = 1 o dovrei interrogare un campo specifico?

So che posso ottenere il numero approssimativo di righe usando SHOW TABLE STATUS, ma voglio ottenere il valore in uno script PHP, e sembra che ci sia molto da scavare usando questo metodo.

+2

Vedi anche: http://www.tocker.ca/2013/05/02/fastest-way-to-count-rows-in-a-table.html –

risposta

17

Se sei OK con il numero stimato e proprio non si vuole fare confusione con l'esecuzione SHOW TABLE STATUS da PHP, è possibile utilizzare il DB information_schema:

SELECT TABLE_ROWS FROM information_schema.tables 
WHERE TABLE_SCHEMA = 'my_db_name' 
AND TABLE_NAME = 'my_table_name'; 
+0

Sono curioso di sapere come questo è "stimato". Qualcuno potrebbe fornirmi maggiori informazioni su questo? Perché questo numero non dovrebbe essere completamente preciso? Grazie. –

+2

@MMiller - Puoi leggere tutto su di esso qui: http://dev.mysql.com/doc/innodb/1.1/en/innodb-other-changes-statistics-estimation.html – Galz

+0

+1 Molto buono per quando serve non usare 'DOVE'. Se usi 'WHERE', forse un' SELECT count (1) 'è il miglior punto vendita (non so se questo fa un buffer di tutte le righe visualizzate). –

-5

mysql_num_rows potrebbe esserti utile.

+3

Questo non basta dare il numero di righe in un set di risultati bufferizzati? Sto cercando il numero di righe nella tabella completa. – Wige

3

Se la tabella viene letta frequentemente e aggiornata di rado, è consigliabile prendere in considerazione la creazione di una tabella delle statistiche che viene aggiornata tramite triggers quando si apportano modifiche alla tabella.

6

Se si sta bene con il numero approssimativo di record, è possibile utilizzare l'output di "explain".

verion semplificata del codice è

$result = mysql_query('explain SELECT count(*) from TABLE_NAME'); 
$row = mysql_fetch_assoc($result); 
echo $row['rows']; 
Problemi correlati