下面的查询非常慢(运行超过一分钟),我已将问题缩小到OR
操作员 ( ...OR (EXISTS (SELECT...
)。
我使用实时执行来验证 OR 语句的表之间是否存在嵌套循环连接,然后将记录连接回EmailTable
执行计划中的 。
基本上,EmailTable
正在被探查两次。
如果我添加提示OPTION (MERGE JOIN)
,查询将在一秒钟内完成。
请告诉我如何重写此查询,以便优化器默认选择更好的计划。
EmailTable
并且TeamMembers
在 上有聚集索引INS_ID
。表上的统计数据经常更新。
DECLARE @a INT
,@b BIT
,@c INT
,@d INT
,@e INT;
SELECT [XYZ].[CNT] AS [C]
FROM (
SELECT COUNT(1) AS [CNT]
FROM [dbo].[EmailTable] AS [table1]
WHERE ([table1].[INS_ID] = @a)
AND ([table1].[ACTIVE] = 1)
AND ([table1].[QUEUED_TO_SEND] = @b)
AND ([table1].[OWNER_USER_ID] <> @c)
AND (
([table1].[OWNER_USER_ID] IN (- 1))
OR (N'Allusers' = …
Run Code Online (Sandbox Code Playgroud) performance join sql-server optimization exists query-performance