2009-11-17 71 views
11

當使用COUNT函數編寫SQL語句時,我有兩個選擇。COUNT SQL函數的性能

  1. SELECT COUNT(*) FROM <table_name>
  2. SELECT COUNT(some_column_name) FROM <table_name>

在性能方面,什麼是最好的SQL語句? 使用選項1可以獲得一些性能增益嗎?

+0

SQL Server? MySQL的? – gbn 2009-11-17 11:00:17

+0

我正在使用MS SQL Server 2005 – 2009-11-17 11:41:07

回答

20

性能不應該的問題,因爲他們做的2個不同的聚集

  • COUNT(*)爲所有行,包括空值
  • COUNT(some_column_name),在排除了NULL 「some_column_name

參見 「Count(*) vs Count(1)」 的問題更多

+2

它們在主鍵或非空列的情況下沒有區別。 – Borys 2013-07-12 13:04:05

+0

@Borys:你會得到相同的數字。但主鍵會有一個索引=更好。 「非空列」列可能不是。當然,這可能並不重要,但通常情況是這樣 – gbn 2013-07-12 13:22:53

2

不,Sql Server沒有性能提升。

4

選項2實際上統計some_column_name不爲空的所有字段。選項1計算任何字段不爲空的所有字段。所以你可能會從這兩個查詢中得到不同的結果。大多數時候,你居然要計數所有行,然後最快的選項,不檢查任何字段的時候,簡直是SELECT COUNT(1) FROM ...

+1

請參閱此計數(*)與計數(1)http://stackoverflow.com/questions/1221559/ – gbn 2009-11-17 10:53:28

+0

計數(*)還計算所有行,而不是任何值的行不爲空。就性能而言,Count(*)和Count(1)是相同的,因爲查詢優化器可以識別您正在嘗試執行的操作並生成相同的執行計劃。 – 2009-11-17 10:56:15