1. 程式人生 > >Select count(*)和Count(1)的區別和執行效率比較

Select count(*)和Count(1)的區別和執行效率比較

 在MySQL中Count(*)或者Count(1)或者Count([列])或許是最常用的聚合函式。很多人其實對這三者之間是區分不清的。經常會看到一些所謂的優化建議不使用Count(* )而是使用Count(1),從而可以提升效能,給出的理由是Count( *)會帶來全表掃描。

 Count(1)和Count(*)實際上的意思是,評估Count()中的表示式是否為NULL,如果為NULL則不計數,而非NULL則會計數。比如我們看程式碼1所示,在Count中指定NULL(優化器不允許顯式指定NULL,因此需要賦值給變數才能指定)。

下面給出一個實際的查詢時間的比較,從中可以看出Count(1)確實要比Count(*)的效率高,查詢時間也要短的多!!!下面上圖:


中間省略掉

.......................................................


下面分別比較兩種方式的實際耗時:

(1)使用coun(*)方式


(2)使用coun(1)方式



這還是在僅幾千條資料的情況下的時間,實際上當面臨上千萬條資料時候,二者的效率和時間差將會更加明顯的。