我有一个视图,在15秒内返回超过100000行。该视图返回一个字段ElementId。我有一个带有主键ID的表元素。
SELECT MV.ElementId
FROM MyView MV
当我在视图和表之间应用连接时,我的查询非常慢(> 4分钟),如下所示:
SELECT E.Id
FROM MyView MV
INNER JOIN Elements E ON E.Id = MV.ElementId
WHERE E.CustomerId = @CustomlerId
为什么两个查询之间的执行时间如此不同?如何优化第二个查询?
我使用SQL Server 2014
答案 0 :(得分:0)
取决于很多因素:
1st - 对于每个参数或仅针对其中一些参数,此查询是否缓慢? 如果此查询仅对其中一些查询速度较慢,则可以尝试OPTIMIZE FOR UKNOWN功能 - https://blogs.msdn.microsoft.com/sqlprogrammability/2008/11/26/optimize-for-unknown-a-little-known-sql-server-2008-feature/
第二 - 你有关于Elements表的任何索引吗? 如果没有,您可以在elementId列上创建聚簇索引。
如果您能与我们分享执行计划,那将是最好的。
问候!
答案 1 :(得分:-1)
优化您的数据库: 1.调整数据库和表 2.在表中创建索引(在mysql中测试)
答案 2 :(得分:-2)
考虑索引MV.ElementId以及Elements.CustomerId