Sql-Server
基數,MS-SQL的並行提示替代
UPDATE MARK M SET ARCHIVE_FLAG = 'N' WHERE EXISTS (SELECT /*+ cardinality(S1, 10) parallel(S1,8)*/ 1 FROM SHFASG S, SHIFT S1 WHERE S.ID = S1.ID AND M.ID = S.MARKID AND ARCHIVE_FLAG <> 'Y');
這是我的 oracle 查詢,我想為我的 MS SQL DB 創建類似的查詢,請幫助
開箱即用,您不需要在 SQL Server中使用查詢提示,除非您需要,*甚至可能在您使用 Oracle 的情況下是正確的,從查詢的外觀來看。Oracle 中的基數提示適用於當您的謂詞對於 Oracle 的Cardinality Estimator*而言過於復雜但您的查詢看起來相當簡單時。
無論如何,SQL Server 中沒有與 Oracle 的基數提示完全相同的提示,並且關於並行查詢提示,您可以在 SQL Server 中使用如下
MAXDOP
提示指定它:UPDATE M SET M.ARCHIVE_FLAG = 'N' FROM MARK M WHERE EXISTS ( SELECT 1 FROM SHFASG S, SHIFT S1 WHERE S.ID = S1.ID AND M.ID = S.MARKID AND ARCHIVE_FLAG <> 'Y' ) OPTION (MAXDOP 8);
但同樣,您應該先嘗試在沒有任何提示的情況下執行查詢,並且僅在必要時使用它們。指定並行提示只會限制查詢的性能,並可能使其執行速度變慢(以在執行時消耗伺服器資源較少為代價)。