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