优化复杂查询
本文关键字:查询 复杂 优化 | 更新日期: 2023-09-27 18:15:47
我有一个查询,合并表的一些id。
SELECT ROW_NUMBER() OVER (ORDER BY PagedOptionData1.ExternalId ASC,
PagedOptionData1.RunDateTime DESC
) AS RowNumber,
PagedOptionData1.*,
PagedOptionData2.*
FROM PagedOptionData AS PagedOptionData1
LEFT OUTER JOIN PagedOptionData AS PagedOptionData2
ON PagedOptionData1.ExternalId = PagedOptionData2.ExternalId
AND PagedOptionData2.rn = 2
WHERE PagedOptionData1.rn = 1
其中PagedOptionData是一个具有各种连接的临时表
这个查询可以优化吗?
无论您使用原始表单还是我的建议,您都需要(ExternalId ASC, RunDateTime DESC)
的索引
有一件事很突出:当你在同一个表上两次使用SELECT *时,你将如何消除列名中的歧义?
为了避免顺序列访问并简化查询,我考虑重写:
SELECT TOP 2
*
FROM
PagedOptionData
ORDER BY
ExternalId ASC, RunDateTime DESC
这大大简化了问题,代价是在客户端代码中增加了更多的逻辑
查询看起来不是很复杂,所以如果它运行缓慢,应该通过添加索引来进行优化。Sql Server可以建议添加索引
- 将查询粘贴到新的Sql Management Studio窗口中。
- 点击工具栏中的"包含实际执行计划"按钮。
- 执行查询。
- 检查返回的执行计划是否有索引建议(在查询的正下方以绿色文本显示)。
- 创建索引并重试。