Sql-Server
FORCESEEK 查詢提示是否可以用於連結伺服器上正在查詢的表?(即作為分佈式查詢的一部分)
我有一個使用 FORCESEEK 提示的查詢,並且在我查詢的數據庫所在的伺服器上執行良好。如果我嘗試從不同的伺服器(針對原始伺服器)遠端執行相同的精確查詢,我會收到以下錯誤:
消息 7436,級別 16,狀態 1,第 4 行查詢處理器無法生成查詢計劃,因為表或視圖“TableBeingQueried”上的 FORCESEEK 或 FORCESCAN 提示不能用於遠端數據源。刪除提示並重新送出查詢。
範例 T-SQL:
SELECT DISTINCT Table3.Field5 FROM Server1.Database1.Table1 AS T1 INNER JOIN Server1.Database1.Table2 AS T2 WITH (FORCESEEK) -- Index exists for T2.Field2 ON T1.Field1 = T2.Field2 INNER JOIN Server1.Database1.Table3 AS T3 WITH (FORCESEEK) -- Index exists for T3.Field3 ON T2.Field4 = T3.Field3
您可以使用
OPENQUERY()
能夠查詢連結伺服器並應用FORCESEEK
/FORCESCAN
提示。例子:
SELECT * FROM OPENQUERY( [Server1], 'SELECT DISTINCT Table3.Field5 FROM Server1.Database1.Table1 AS T1 INNER JOIN Server1.Database1.Table2 AS T2 WITH (FORCESEEK) -- Index exists for T2.Field2 ON T1.Field1 = T2.Field2 INNER JOIN Server1.Database1.Table3 AS T3 WITH (FORCESEEK) -- Index exists for T3.Field3 ON T2.Field4 = T3.Field3;');
您不能在遠端數據源上使用 FROCESCAN 或 FORCESEEK。
FORCESCAN 提示具有以下限制:
無法為遠端數據源指定提示。
使用 FORCESEEK 提示(帶或不帶索引參數)時,請考慮以下準則:
無法為遠端數據源指定提示。使用索引提示指定 FORCESEEK 時返回錯誤 7377,而在沒有索引提示的情況下使用 FORCESEEK 時返回錯誤 8180。