2009-11-08 7 views
17

C'è una differenza tra le seguenti query, supponendo che ci sia un campo primario "id" nella tabella (come nella velocità, ecc.)?COUNT (id) vs. COUNT (*) in MySQL

SELECT COUNT(id) 
    FROM table 

vs.

SELECT COUNT(*) 
    FROM table 
+0

Si può guardare su queste discussioni http://stackoverflow.com/questions/1221559/count-vs-count1 http://stackoverflow.com/questions/433913/in-sql-is-there-a-difference- tra-count-and-countfieldname http://stackoverflow.com/questions/59294/in-sql-whats-the-difference-between-countcolumn-and-count –

risposta

16

Dai un'occhiata alla Count(*) vs Count(col) a www.mysqlperformanceblog.com, che discutere di questo argomento di vari tipi 'col' (NOT NULL o meno, con l'indice, ecc) e questo per le tabelle MyISAM e InnoDB.

2

So che la domanda è su MySQL, ma per quello che vale, count (*) è consigliato per Oracle: che mostra che questo è specifico del database (vedi commento sopra di BalusC). Poiché molti database (MS-SQL, MySQL) hanno tabelle di schemi di informazioni che contengono vari tipi di metadati, ci sono inevitabili differenze se una sintassi sta semplicemente cercando un valore prontamente disponibile, e un altro sta andando direttamente al tavolo . Alla fine della giornata: prova diverse opzioni, e vedi cosa SPIEGARE ti sta dicendo che sta succedendo dietro le quinte.

+1

Mi sembra sempre di più che la strada da percorrere sia o usare un ORM (e sperare che si ottimizzi per tutti i casi), o scrivere SQL esattamente per * un motore di database * e dimenticare il resto. –

0

Count (*) Count (Ename) può mostrare diff perché Ename non è una colonna con vincolo non nullo e sicuramente avere alcuni valori nulli che non vengono contati.

Spero che aiuti ..!