0
查询1运行速度快和不同执行计划使用并行执行计划为不同的参数值
SELECT c.[Date]
FROM Table1 c
left join Table2 bec on bec.Col1ID = c.Col1ID and bec.Active = 1
WHERE c.Active = 1
AND (c.Col2ID not in (3,4,5,6,7,8,9,10) or c.Col2ID is null)
and (c.[Date] >= '06/12/2014 02:30:00.000 PM')
查询2需要更长的时间,并使用正常(串行)执行计划
SELECT c.[Date]
FROM Table1 c
left join Table2 bec on bec.Col1ID = c.Col1ID and bec.Active = 1
WHERE c.Active = 1
AND (c.Col2ID not in (3,4,5,6,7,8,9,10) or c.Col2ID is null)
and (c.[Date] >= '06/15/2014 02:30:00.000 PM')
问题:
- Query2正在尝试获取Query1的子集数据,因此Query2应该更快。
- 这两个查询只有参数值不同,为什么完全不同的执行计划。
信息有关服务器:这是在SQL Server中运行2008
表结构如下:上表1 非群集上(活动,日期)
TABLE Table1(
Col1Id [int] IDENTITY(1,1) NOT NULL,
Col2Id [int] NULL,
Col3 [int] NOT NULL,
Col4 [int] NULL,
Active [bit] NOT NULL
[Date] [datetime] NOT NULL)
指数
TABLE Table2(
[Col] [int] NOT NULL,
Col1ID [int] NOT NULL,
[Col2] [int] NOT NULL,
[Col3] [datetime] NOT NULL,
[Col4] [int] NOT NULL,
[Col5] [datetime] NULL,
[Col6] [int] NULL,
[Active] [bit] NULL)
表2上的索引 非集群活动包括(Col,Col1Id)(Col,Col1ID)
对此的任何帮助是值得欢迎的。
您的表格结构将会很有帮助。也是你的索引。 –
我刚刚更新了这个问题,Query1在Parallel中运行并且在Serial中运行Query2。请让我知道是否仍然需要表结构。 – singsuyash
是的。这样我们就不能复制它。 –