簡體   English   中英

200列表格-300萬行-性能

[英]200 column table - 3 million rows - performance

我目前正在一個客戶向我提供數據庫的項目中,該數據庫包括一個包含200列和300萬行數據的表。 這絕對是設計不佳的,目前正在探索一些選擇。 我在2012 Mbp上開發了該應用程序,內存為16GB的RAM和512 ssd。 我必須使用mvc4開發該應用程序,因此在osx上使用並行8設置了開發和測試環境。 作為設計的一部分,我為客戶端開發了一個接口,以對該具有數百行的大型表創建自定義查詢,因此我將queryString發送到使用動態linq傳遞的控制器,並將結果使用JSON發送到視圖(以填充kendo ui網格)。 在我的Mbp上,使用我創建的界面測試查詢時,最多需要10秒(發現太多時間)才能將結果返回到kendo ui網格。 同樣,當我直接在sql server中測試查詢時,它永遠不會花很長時間。

但是,當我將其部署到客戶端以測試這些相同的查詢時,需要花費3分鍾以上的時間。 長話短說,客戶端將升級服務器硬件,但與此同時,他們仍然需要測試應用程序。

我的問題是,盡管該表包含200列,但每一行都是唯一的。 更具體地說,設計是:

PK-(GUID)OrganizationID(FK)-200列(稅字段)

如果我將其重新設計為:

PK(GUID)組織ID(FK)字段ID(FK)輸入

字段表:FieldID字段名

這會將這300萬行數據表變成6億行,但只有3列。 我會看到性能增強嗎?

任何見識將不勝感激-我了解標准化,但我的大部分經驗是編程。

提前致謝!

在不知道您在表上運行的查詢的情況下,很難做出任何判斷。

以下是一些注意事項:

  1. 如果查詢僅返回少量行,請確保查詢正在使用索引。
  2. 檢查您是否有足夠的內存將表存儲在內存中。
  3. 在進行計時時,請確保忽略第一次運行,因為這只是加載頁面緩存。

為了進行測試,只需減小表的大小即可。 那應該加快速度。

至於您有關標准化的問題。 您的非規范化結構比規范化結構占用更少的磁盤空間,因為您不需要為每個值重復鍵。 如果要在一行上查找一個值,則規范化將無濟於事。 您仍然需要掃描索引以找到該行,然后加載該行。 並且,該行將在一頁上,而不管它是規范化還是非規范化。 實際上,歸一化可能會更糟,因為索引會更大。

有一些查詢示例,在這些示例中可以對數據進行標准化。 但是,總的來說,如果您按行獲取數據,則您已經擁有了更高效的數據結構。

您可以采用分頁方法。 將有2個查詢:initial將返回所有行, 僅返回具有唯一ID的列。 該數組可以分為幾頁,例如每頁100個ID。 當用戶選擇特定頁面時-您將100個ID傳遞給第二個查詢,這一次將返回所有200列, 僅返回請求的100行。 這樣,您不必一次返回所有行中的所有列,這將大大提高性能。

暫無
暫無

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

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