簡體   English   中英

“不”之間的數學關系是什么? SQL查詢的“受影響的行數”和“執行時間”?

[英]What is the mathematical relationship between “no. of rows affected” and “execution time” of a sql query?

查詢保持不變,即它將保持不變。

例如,如果選擇查詢返回10000行,則需要30分鍾。

如果必須返回20000行,同一查詢將花費1個小時嗎?

我有興趣知道之間的數學關系 行數(N)執行時間(T)保持其他參數不變(K)。

即T = N * K或

T = N * K + C或

還有其他公式嗎?

如果有幫助,請閱讀http://research.microsoft.com/pubs/76556/progress.pdf 任何在我之前都可以理解的人,請回復。 謝謝...

嗯,這是個好問題:),但是沒有確切的公式,因為它取決於執行計划。

SQL查詢優化器可以選擇另一個查詢執行計划,該計划返回不同的行數。 我猜如果兩個查詢的查詢執行計划都相同,並且您有一些“實驗室”條件,那么時間增長可能是線性的。 您應該對sql執行計划和統計信息進行更多研究

以讀取單個表中的每一行的非常簡單的示例為例。

在最壞的情況下,您將必須從基礎存儲中讀取表的每一頁。 最壞的情況是必須隨機搜索。 尋道時間將主導所有其他因素。 因此,您可以估計總時間。

time ~= seek time x number of data pages

假設您的行大小相當規則,那么行數是線性的。

但是,數據庫做了很多事情來嘗試避免這種最壞的情況。 例如,在SQL Server中,表存儲通常以8個連續頁面的范圍分配。 硬盤驅動器的流IO速率比隨機IO速率快得多。 如果您具有聚簇索引,則按聚簇順序讀取頁面往往比隨機IO具有更多的流IO。

忽略內存緩存的最佳情況是(SQL Server頁面大小為8KB)

time ~= 8KB * number of data pages / streaming IO rate in KB/s

行數也是線性的。

只要您能合理地管理碎片管理,就可以在這種簡單情況下合理地線性推斷。 假設您的數據遠大於緩沖區緩存。 如果不是這樣,您還必須擔心查詢從緩沖區讀取變為從磁盤讀取的懸崖邊緣。

我也忽略了諸如並行存儲路徑和訪問之類的細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM