2012-10-11 15 views
5

Per ottenere il numero totale di record, io di solito uso questa domanda:Quale query MySQL è efficace per ottenere il numero totale di record

$total= mysql_num_rows(mysql_query("SELECT id FROM t_statistic WHERE pageid = $pid")); 

ma ho ottenuto uno l'altra query come di seguito:

$data = mysql_fetch_object(mysql_query("SELECT COUNT(id) AS num_rows FROM t_statistic WHERE pageid = $pid")); 
$total = $data->num_rows; 

Tra le due query di cui sopra. Quale è più rapidamente ed efficacemente (quando il numero totale di record in milioni)?

+0

entrambi presuppongono che la query di selezione abbia avuto esito positivo e si verificherà se qualcosa non funziona. l'ipotesi che le query funzionino è un pessimo modo di procedere. –

+0

Un possibile duplicato di http://stackoverflow.com/questions/2485224/sql-php-which-is-faster-mysql-num-rows-or-select-count – janenz00

risposta

5

Preferisco la seconda query. Ti dà già il conteggio dei record, mentre la prima query ti dà l'elenco degli ID (non il conteggio), sebbene sia stato filtrato ma ci sono alcuni casi in cui l'ID esiste più di una volta nella tabella.

0

Decisamente il secondo.

Alcuni motori, come MySQL, possono fare un conteggio semplicemente guardando un indice piuttosto che i dati della tabella.

Ho usato qualcosa del genere su database con milioni di record.

SELECT count(*) as `number` FROM `table1`; 

modo più veloce di: mysql_num_rows ($ res);

BTW: Il numero * in Count (*) in pratica significa che non guarderà i dati, conterrà solo i record, anziché Count (colname).

1

La seconda query è veloce ed efficiente:

SELECT COUNT (id) AS numero_colonne FROM WHERE t_statistic pageid = $ pid

se si sa circa l'ottimizzazione delle query. La query manterrà solo il conteggio in memoria durante il calcolo della risposta. E dà direttamente il numero di righe.

Dove, come prima query:

SELECT id FROM WHERE t_statistic pageid = $ pid

mantiene tutte le righe selezionate in memoria. quindi il numero di righe viene calcolato in ulteriore operazione.

Quindi la query second è la migliore in entrambi i modi.

0
1) SELECT COUNT(*) FROM t_statistic WHERE pageid = $pid" --> count(*) counts all rows 

2)SELECT COUNT(id) FROM t_statistic WHERE pageid = $pid" --> COUNT(column) counts non-NULLs only 

3) SELECT COUNT(1) FROM t_statistic WHERE pageid = $pid" -->COUNT(1) is the same as COUNT(*) because 1 is a non-null expressions 

Your use of COUNT(*) or COUNT(column) should be based on the desired output only. 

Così. Infine abbiamo il risultato è il conteggio (colonna) è più veloce rispetto al conteggio (*).

Problemi correlati