2010-08-06 41 views
0

我有一張約3000條記錄的表格,我需要將其導出到csv(通過.net Web應用程序),但是我也需要從大約10個表中提取信息(約3000條記錄每個),使表格更多列,例如Sql Server最有效的加入方式

 
Individual Table 
Organisation Table 
IndividualOrganisation Table 

輸出: Individual.Name,Organisation.Name

目前我使用一個存儲proceedure創建臨時表與額外的列(例如,一個用於Organisation.Name等...),那麼即使我將時間延長到200,也會導致SQL連接超時期間過去的錯誤!

在我的存儲過程中構建一個大規模的單個sql語句並執行它會更好嗎?這10個'加入'的表是以存儲過程的用戶選擇爲條件的,當前有ifs序列,然後選擇

回答

7

只有3000條記錄我認爲幾乎任何查詢都可以正常運行,除非你的服務器嚴重不足(或過度勞累)。

你有適當的索引嗎?這是我首先要檢查的。

+0

有10行3000行的表格。如果你只是加入他們,你會得到3000^10行。這是一個有34個零的數字。 :) – Andomar 2010-08-06 11:17:08

+0

@Andomar:不,你會得到3000行,平均每列多10倍。 – 2010-08-06 11:18:57

+1

只有當你在所有表格之間進行笛卡爾連接時,我懷疑你是真正想要做什麼。 – 2010-08-06 11:22:02

1

對於許多分離的查詢,優化器只能查看工作負載的一小部分。一個查詢允許SQL Server優化整體。這通常會以更快的速度結束。

通過將查詢的各個部分移動到視圖中,您可以保持新查詢的可讀性。視圖就像SQL宏一樣,而且SQL Server優化視圖的查詢,就像視圖擴展到SQL一樣。

0
  • 檢查是否有用於過濾所有外鍵主鍵和列指標(WHERE子句後)。

  • 只從每個表中選擇您需要的字段。

  • 您可以使用INSERT...SELECT語句在一個查詢中完成所有操作。

0

每張表只有3000條記錄,索引應該是無關緊要的 - 它應該是更快的做全表掃描,而不是通過索引訪問。

我建議您嘗試逐個刪除查詢,直到可以確定哪個查詢導致超時問題。