2014-04-06 24 views
-2

我有兩種方法來獲取DB2中表中的行數。 一種方法是「選擇計數(*)」與「選擇1」結果的計數:哪種方法更有效地獲得DB2中的行數?

SELECT COUNT(*) FROM Foo WHERE col1 = val1; 

另一種方法是計數這是從下面的查詢在我的Java代碼retrived與方法的結果(1號的名單)

SELECT 1 FROM Foo WHERE col1 = val1; 

在這裏,我將得到第二個查詢中的「1號列表」,然後在我的java代碼中獲取該列表的大小以獲得計數。

有人可以解釋哪個是最有效的方法來獲得行數?

+1

第二個示例不給出計數。你可能會困惑,如果存在()? –

+0

@MitchWheat號其實我想在我的java代碼中獲取1的列表。然後我會得到該列表的大小。 – SrinuB

+0

投票以基於意見爲基礎結束,但按理說生成一個數字比生成一個列表更有效。 –

回答

1

select count更快 - 因爲數據庫只需要返回一個數字而不是一個可能的長列表。

+0

感謝@Mike的幫助。我不知道什麼樣的內部操作數據庫會做。我只是試圖從數據庫中取出負載來檢查我的java代碼中的計數,因爲我只是檢索數字1的列表。如有任何問題,請糾正我。 – SrinuB

+0

數據庫必須執行查找符合條件的所有行的相同工作。然後對它們進行計數是比較少的工作(只是增加一個計數器)而不是創建要返回的行列表(分配內存,初始化行結構)。那麼網絡的負載就少一點來發回一個單一的數字。 –

+0

另請注意,根據所選條件,數據庫可能實際上不必「計數」行 - 如果條件與索引匹配,則系統可能會從統計數據中檢索它,從而使其成爲單個查找。 –