2011-06-07 26 views
0

我有一個存儲過程使用臨時表在select子句中創建一些連接。 SELECT子句包含臨時表像這樣的ID列中的值:包括臨時表中的值減慢查詢

CREATE TABLE #TempTable 
(
Id INT PRIMARY KEY, 
RootVal INT 
) 

的選擇是這樣的:

Select value1, value2, #TempTable.Id AS ValKey 
    From MainTable INNER JOIN #TempTable ON MainTable.RootVal = #TempTable.RootVal 

查詢接管一分鐘,在現實生活中,但如果運行我從它運行的選擇列表中刪除「#TempTable.Id」。

有沒有人知道爲什麼從一個#temp表中包含一個值與在連接中使用它相比有如此巨大的代價?

+0

有多少行?臨時表上的索引? MainTable.RootVal數據類型? – gbn 2011-06-07 17:55:25

+0

大約500000,是的,臨時表中以及MainTable.RootVal上都有一個RootVal索引。我要重做它,所以我不需要從搗固表中獲得價值,但我完全不知道問題是什麼。 – Daniel 2011-06-07 18:36:37

+0

您可以添加查詢計劃嗎? – gbn 2011-06-08 04:56:35

回答

-1

最有可能的:

  • 數據類型不匹配
    如爲nvarchar VS INT

  • 上MainTable.RootVal
    缺乏指數爲什麼Id的PK,然後在另一列加入?

+0

它的int無處不在,我在臨時表中的RootVal列上有一個索引,當然不需要主鍵。我完全難倒了.. – Daniel 2011-06-07 18:32:39