假設我按如下方式運行 SQL 查詢,并且ID在兩個表中的列中都有索引以及 where 條件過濾。
SQL Server 是否足夠智能以優化查詢?或者它會在執行連接和過濾之前先執行查詢以選擇兩個 CTE 中的所有內容?
在我看來,在 CTE 中包裝代碼使其可讀,但我不確定 SQL Server 是否足夠智能來優化查詢。
WITH SomeCTE AS
(
SELECT ...
FROM ...
), AnotherCTE AS
(
SELECT ...
FROM ...
)
SELECT *
FROM SomeCTE
INNER JOIN AnotherCTE ON SomeCTE.ID = AnotherCTE.ID
AND SomeCTE.Column1 = 'Hello';
uj5u.com熱心網友回復:
SQL Server 是否足夠智能以優化查詢。或者它會先執行查詢以在執行連接和過濾之前選擇兩個 CTE 中的所有內容。
通常,CTE、視圖和子查詢不會單獨執行。查詢是整體優化的,外部查詢中指定的謂詞可能會被推送到 CTE 中。
但是應用的確切優化取決于查詢詳細資訊和表結構,因此您需要進行測驗。例如,如果SomeCTE.Column1是 CTE 中運算式的結果,它將阻止推送謂詞。
有時您希望CTE 被具體化,而 SQL Server 沒有任何查詢提示來強制這樣做。這種情況下的正常模式是將您想要具體化到臨時表中的 CTE 分解出來,并在 CTE 中參考它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368402.html
標籤:sql-server
上一篇:如何將字串轉換為字母字典?
