我已经问过几乎相同的question但是它没有得到满意的解答,我只是遇到了类似的情况。
select r.order_number, cl.COMMANDE, m.[order #]
from [Offline RN General] r
left join mcdb_summary m ON r.order_number=m.[order #]
left join coclico cl ON cl.ORDER_ID=r.order_number
where r.[order_number] is not null and r.GroupID=358472 and converted='yes' and r.[Booking Date]>='20140401'
所以最后一个条件(r。[预订日期] > = ' 20140401')导致查询至少需要40秒才能完成,而没有那个条件或 - 奇怪 - 或者如果是r。[预订日期] < ' 20140401'它只需要2秒钟。
在第一种情况下,显然影响最大的是[mcdb_summary]。[suggest2]索引扫描 - 它之前由ssms建议 - 这是它的定义:
CREATE NONCLUSTERED INDEX [suggested2] ON [dbo].[mcdb_summary]
(
[cancelled] ASC
)
INCLUDE ( [order #],
[Product_Name]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
有人能指出我可能的原因并解决问题吗?
答案 0 :(得分:1)
首先要尝试:
UPDATE STATISTICS [Offline RN General];
统计信息提供有关数据分布的信息(例如,日期X的行数,日期Y的数量等),这有助于查询引擎采取基于成本的"决策:执行索引搜索而不是索引扫描等。
您可以通过运行简单的SQL query:
来查看这些统计信息DBCC SHOW_STATISTICS('<tablename>', '<indexname>');
您可以详细了解统计信息are updated。
答案 1 :(得分:0)
如果没有看到索引,我会确保所有可能的密钥都处于良好状态,以优化“R”表上的查询。
table index
[Offline RN General] ( groupID, converted, order_number, [booking date] )
mcdb_summary ( [order #] )
coclico ( order_id, commande )
此外,所有列(已转换)的确认都应该符合表格...我只能转换的GUESS在脱机RN常规表中。