我即将提高将大表连接到其他表的查询的性能:
例如:
SELECT *
FROM
ItemsTable l
JOIN TypesTable t ON l.typeId = t.id
WHERE
statusId <> 1
AND t.SomeFlag = 1
尽管外键上存在索引(示例中为typeId),但查询执行得很糟糕,
执行计划:https://www.pastiebin.com/59f33fed82bc0
我注意到创建了展平模式的视图(连接到类型表和&#34; someFlag&#34;连续返回)性能问题消失了。
我即将创建一个执行连接的视图。还有其他方法可以改善此类查询的性能吗?
我注意到可以通过向查询添加order by子句来解决问题。在上面的查询中,通过typeId&#34;添加&#34;顺序;使sql server使用在类型列上创建的索引。
答案 0 :(得分:1)
对于此查询:
SELECT TOP 10 *
FROM ItemsTable l JOIN
TypesTable t
ON l.typeId = t.id
WHERE statusId <> 1 AND t.SomeFlag = 1;
最佳索引可能是TypesTable(someFlag, id)
和ItemsTable(typeid, statusId)
。
如果大多数项目的状态为1,则您的查询效果会很差。