2015-09-23 16 views
0

鑑於我們在關係數據庫中有一個大表,我們需要查詢。它是否會將大表查詢拆分爲對錶子集的多個查詢?

我們有兩個選擇:

  • 查詢整個表
  • 表即行內數據的查詢子集從1到1000,然後一零零一年至2000年等

這是否分離有一定意義?

它依賴於查詢結構嗎?

讓我們來添加一些數學。給定一些查詢執行時間與n^3成正比,其中n是表中的行數。這意味着在第一種情況下查詢執行時間與n^3成正比。至於第二種選擇 - 它的不同。總時間將是(n/3)^ 3 +(n/3)^ 3 +(n/3)^ 3 = n^3/9,這是更好的。

現實生活更復雜:在這種情況下查詢不會相同,我們必須花費一些時間將行限制到子集。

也可以限制數據庫的連接數和併發數,因此我們無法同時通過10個查詢來查詢它,例如,至少以相同的速度。

但這些理由有道理嗎?這可以幫助減少一些大桌子的時間開支嗎?

+0

你是真的在檢索整個表格還是應用一個條件;如果你正在過濾,你在過濾的列上有索引嗎?你從哪裏得到n^3數字? –

+1

我不認爲有可能回答這個問題,因爲它依賴於數據和數據庫的設置。我可以提供的最好建議是嘗試兩種方式並使用最好的方法。祝你好運。 –

+0

另外,你的數學是關閉的。 (n/3)^ 3 =(n^3)/ 27。但是,對於您的斷言「查詢執行時間與n^3成比例」,我沒有看到任何支持。你從哪裏得到那個的?爲什麼它不是「與n」或「n^2」或「e^n」或「n^e」成比例?另外 - 這張桌子有多少行?或者,「大」是什麼意思? –

回答

0

這取決於很多標準。他們中的一些是:

  1. 如何繁忙的數據庫是什麼?那是多少個並行查詢是 正在運行?

    原因:如果有大量查詢運行或具有多個平行會話然後在大表查詢的任何查詢將是緩慢的,而較小的運行速度更快。

  2. 進入多少個較小的表格大表格被分成了?

    原因:一點這裏要考慮的是,如果一個大表劃分 成幾個小表,並運行在每個小表的查詢,則需要單獨的結果進行彙總。這可能需要一段時間,具體取決於查詢。

  3. 查詢的類型被執行

    原因:如果正在運行具有在柱過濾條件的查詢,並且你把根據該列的值的大的表,則可以跳過一些表的基礎上查詢條件,從而減少輸出

總體的時間在這種情況下,而不是將一個大表爲規模較小的,最好是分區表。範圍分區可用於較大的表格以加快查詢執行。