MySQL count(1)、count(*)、count(表列名)之間的區別

從執行結果來說:

count(1)和count(*)之間沒有區別,因為count(1)、count(*)都不會去過濾空值,但count(列名)就有區別了,因為count(列名)會去過濾空值null。

MySQL count(1)、count(*)、count(表列名)之間的區別

從執行效率來說:

他們之間根據不同情況會有些許區別,MySQL會對count(*)做最佳化。

如果列為主鍵,count(列名)效率優於count(1)

如果列不為主鍵,count(1)效率優於count(列名)

如果表中存在主鍵,count(主鍵列名)效率最優

如果表中只有一列,則count(*)效率最優

如果表有多列,且不存在主鍵,則count(1)效率優於count(*)