sybase的Transact-SQL用戶指南是這樣說的: count 得出表達式中非空值的數(shù)量,而 count(*) 得出表中的總行數(shù)。
select count(LAAY) from K_ZS.. B_MS
select count(
distinct LAAY) from K_ZS.. B_MS
select count(*) from K_ZS..B_MS
上面的三條
sql在2.106開發(fā)庫上執(zhí)行結(jié)果如下:
-----------
61940
-----------
353
-----------
72127
以前老以為對同一個查詢條件,count(fieldname)和count(*)的結(jié)果是一樣的……所以首先要對count函數(shù)的定義清楚,
從我們一般使用count函數(shù)的角度,這里最好就是用count(*) 或者count(主鍵),或者是一個肯定不為null的列,不然結(jié)果就可能少了。
另外從
性能上,在K_MS.. B_MS上做實驗,
數(shù)據(jù)為1472435條(其中BH為主鍵):
引用:
select count(*) from K_MS.. B_MS
Execution Time 2.
SQL Server cpu time: 200 ms. SQL Server elapsed time: 283 ms.
select count(BH) from K_MS.. B_MS
Execution Time 2.
SQL Server cpu time: 200 ms. SQL Server elapsed time: 233 ms.
如果用表中的其他非主鍵字段(其中LAAY、JBFY為
索引字段,SPCX普通字段),比如
引用:
select count(LAAY) from K_MS.. B_MS
Execution Time 4.
SQL Server cpu time: 400 ms. SQL Server elapsed time: 326 ms.
select count(SPCX) from K_MS.. B_MS
Execution Time 194.
SQL Server cpu time: 19400 ms. SQL Server elapsed time: 28373 ms.
select count(JBFY) from K_MS.. B_MS
Execution Time 16.
SQL Server cpu time: 1600 ms. SQL Server elapsed time: 2436 ms.
多次執(zhí)行以上sql可以得出初步結(jié)論:count(主鍵)最快,count(*)次之,并且兩者性能差異不大;但是如果count其他
任何非主鍵字段,則速度一般會比較慢,尤其是哪些非索引字段。
posted on 2008-08-30 14:51
歲月如歌 閱讀(804)
評論(1) 編輯 收藏 所屬分類:
db