Performance

性能:選擇 count(*) where… VS select column_name where

  • April 1, 2019

我將保持場景簡單:

  • 有一個應用程序,有一個數據庫。
  • 在數據庫中,有一張表,記錄量很大
  • 我定期向應用程序提供這些記錄

現在,一次重新載入可能意味著其中一些更改: i. 第二組中的新記錄。更新了第 iii 組中的記錄。集合中已刪除的記錄

最後,對於保持不變的記錄,我可以使用比通過 ODBC 讀取表快 100 倍的不同程序。

知道了這一點,我試圖通過盡可能少地使用 ODBC 來減少重新載入時間,並且在我的算法中途遇到了一個我無法解決的問題。

select count(*) where [condition]**反對速度快多少select columnName where [condition]

為什麼?因為只需重新載入新的和更新的記錄,我就可以通過計算記錄來計算是否有刪除,具體取決於

$$ condition $$. 然後,如果有刪除,我將不得不從數據庫中讀取剩下的那些。通常,新記錄和更新記錄的數量將是整個記錄的一小部分。如果計數比普通選擇快得多,我可能想將其用作快速檢查,因為刪除記錄不是常見的活動。

它實際上取決於您在執行查詢和收集統計資訊時使用的數據庫。

  1. 甲骨文數據庫。 如果已經收集了統計資訊,則第一個查詢將在 0.00001 秒內返回行數。如果還沒有,那麼它將比執行第二個查詢快五倍,因為它正在檢索大量行而不是僅一個。
  2. 對於MS SQL來說幾乎是一樣的。
  3. 對於MySQLMariaDB,它取決於引擎。但我假設這些數據庫總是嘗試記憶體行數的值,因為優化器會更快地進行查詢。

此外,WHERE子句和 in 中的列COUNT()也很重要。它們可能是索引,也可能不是索引等等。考慮查詢之間的性能有很多標準,但在大多數情況下,建議使用第一個標準來獲取行數。如果我有特定的例子,我可以更準確地告訴你。

引用自:https://dba.stackexchange.com/questions/170911