我有一个查询,通过某个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是具有各种连接的临时表。
可以优化此查询吗?
答案 0 :(得分:4)
您需要(ExternalId ASC, RunDateTime DESC)
上的索引,无论您使用的是原始表单还是我的建议
有一点很突出:在同一个表上使用SELECT *两次时,如何消除列名中的歧义?
为了避免有序列访问并简化查询,我考虑重写:
SELECT TOP 2
*
FROM
PagedOptionData
ORDER BY
ExternalId ASC, RunDateTime DESC
这大大简化了事务,代价是客户端代码中的逻辑更多
答案 1 :(得分:2)
查询看起来并不复杂,因此如果运行缓慢,则应通过添加索引来完成优化。 Sql Server可以建议添加索引。