2013-08-23 34 views
9

要獲得結果的行數設置有兩種方式:使用count(*)與NUM_ROWS

  1. 是使用查詢來獲取數

    $query="Select count(*) as count from some_table where type='t1'";

    ,然後檢索計數值。

  2. 在php中通過num_rows()獲取計數。

那麼哪一個更好的表現明智?

+18

如果你的表有一百萬行,並且你在PHP中使用'num_rows()'來計算它們,那麼你需要從數據庫傳遞一百萬行到PHP。如果你在數據庫上使用'count(*)',那麼你將傳遞一行到PHP。 – andrewsi

+0

@andrewsi有哪些性能差異?我的意思是,'COUNT(*)'也只能在數據庫服務器上對行進行計數。 – Itay

+1

@andrewsi,爲什麼不留下答案? –

回答

6

如果您的目標是實際計算行數,請使用COUNT(*)num_rows通常(以我的經驗)僅用於確認超過零行返回並繼續在這種情況下。即使查詢本身需要相同的時間,也可能需要更長的時間才能讀出許多選定的行,與COUNT上的彙總相比也是如此。

2

由於您無需從數據庫服務器中檢索太多數據,因此count在性能和內存方面效率更高。如果您通過單列計數,例如唯一的ID,那麼您可以獲得更高的效率

0

num_rows()會更好,如果你有少量的行和count(*)會給你的表現,如果有大量的行,你必須選擇一個,並將其發送到PHP。

1

這取決於您的實施。如果你處理很多行,count(*)會更好,因爲它不必將所有這些行傳遞給PHP。另一方面,如果您處理的是少量的行,則差異可以忽略不計。

2

有兩者之間的一些差異:

  1. num_rows是接收到的結果行(記錄)的數量。
  2. count(*)是匹配查詢的數據庫中的記錄數。

數據庫可能被配置爲限制返回結果的數量(MySQL允許這樣做),在這種情況下,如果限制低於匹配記錄的數量,兩者可能會有所不同。請注意,限制可能由DBA配置,所以從SQL查詢代碼本身可能不明顯的限制適用。

使用num_rows來計數記錄意味着「傳輸」每條記錄,所以如果你只想要一個總數(這將是一個單獨的記錄/行),你得到count反而更好。

此外count可以用於更復雜的查詢場景中做類似小計的事情,這不容易用num_rows完成。