簡體   English   中英

查看CTE或臨時表?

[英]view over cte or temp table?

我在暫存層中有一個表(未編制索引),該表具有接近1億行。 在數據倉庫層中,我需要從該表中選擇一定數量的行,然后與另一個表(約有5000萬行)聯接,現在我要使用cte。 從此CTE,在與其他表聯接之前再次進行了一些匯總。 所以在這里,如果使用視圖而不是cte會發生什么。 由於需要大量時間,因此我無法對其進行測試。

因此,從總體上講,在性能方面哪一個略有優勢?

ctetemp tableview

任何幫助表示贊賞。

我認為您應該使用帶有索引的本地(單號)臨時表。 因為首先您將從主表中獲取數據。 然后,您將應用一些聚合,循環和自定義邏輯。 好處不多:-

  1. 首先,每當連接關閉時,本地臨時表將被刪除。
  2. 就像您說的那樣,您將獲得數百萬條記錄,然后使用索引將可以更快地搜索。
  3. 使用臨時表並應用一些聚合不會給您的主表帶來負擔。

根據您的描述,CTE是“創建”一次(定義時),使用一次(聚合時)。

通常,這意味着您應將代碼保留為單個查詢,以使優化器找到最佳的執行路徑。

通常,當多次引用CTE時,實現CTE將是一個更大的勝利。 通常,您可以使用窗口函數來避開多個引用,但這是另一回事。

這是一般性建議,但並非總是如此。 將CTE實例化為臨時表可以帶來兩個好處:

  • 查詢優化器可以更准確地估計要優化的行數。
  • 您可以添加索引以提高性能。

第一個可能不是問題,因為您仍然有很大一部分原始行。 第二個可能會有所幫助,但這並非難事。

您可能想要創建索引的物化視圖,而不是臨時表。 這將保持最新狀態,並可能極大地提高性能。

暫無
暫無

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

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