2011-08-15 35 views
2

任何人都可以用簡單的英文將它分解爲在MSSQL中使用臨時表與CTE與表變量之間的性能差異。我經常使用臨時表,並且因爲語法清晰而開始使用CTE,但我發現它們會變慢。我認爲臨時表使用的是系統內存,這就是爲什麼它們看起來很快,但如果嘗試執行多個任務可能會成爲瓶頸。表格變量我很少使用,不知道很多。尋找來自大師的建議!臨時表存儲性能比較

+0

描述相信臨時表(#table)被存儲在系統中分貝,所以不一定在存儲器(也它們繼承某些屬性服務器默認,像覈對)。但我評論的主要原因是說你的標籤是mysql,而不是mssql。 – tomfumb

+0

@tomfumb,它們存儲在tempdb系統數據庫中。 – 2011-08-15 23:54:33

回答

0

CTE性能中立。它們通過抽象出SQL語句簡化了開發人員的查詢 - 通常是複雜的JOIN或應用於字段的內置函數。數據庫引擎只是將CTE嵌入到使用它的查詢中。因此,CTE本身並不「慢」,但是您可能會發現使用臨時表的性能更好,因爲數據庫引擎正在使用臨時表創建更好的查詢計劃。

0

這個問題被回答herehere。簡而言之,這是針對不同任務的不同工具。

  • 表變量可以導致存儲的過程重新編譯比臨時表更少
  • 一個臨時表是良好的再使用或執行多個處理通過對一組數據