count(*)和count(1)執(zhí)行的效率是完全一樣的。
count(*)的執(zhí)行效率比count(col)高,因此可以用count(*)的時候就不要去用count(col)。
count(col)的執(zhí)行效率比count(distinct col)高,不過這個結(jié)論的意義不大,這兩種方法也是看需要去用。
如果是對特定的列做count的話建立這個列的非聚集索引能對count有很大的幫助。
如果經(jīng)常count(*)的話則可以找一個最小的col建立非聚集索引以避免全表掃描而影響整體性能。
在不加WHERE限制條件的情況下,COUNT(*)與COUNT(COL)基本可以認(rèn)為是等價的;
但是在有WHERE限制條件的情況下,COUNT(*)會比COUNT(COL)快非常多;
count(0)=count(1)=count(*)
1. count(指定的有效值)--執(zhí)行計劃都會轉(zhuǎn)化為count(*)
2. 如果指定的是列名,會判斷是否有null,null不計算
當(dāng)然,在建立優(yōu)化count的索引之前一定要考慮新建立的索引會不會對別的查詢有影響,影響有多大,要充分考慮之后再決定是否要這個索引,這是很重要的一點,不要撿了芝麻丟了西瓜。