【发布时间】:2015-10-07 05:51:42
【问题描述】:
如果不添加ORDER BY RenewalDate,则需要 1 秒。在添加 ORDER BY 子句时,它需要 2.22 分钟。我在这个列上做了索引,但没有提高性能。Pindex(Non-Unique,Non-Clustered)
如何在不降低性能的情况下使用ORDER BY 子句。
RenewalDate (date, null) - 这个带有ORDER BY 的列导致了问题
查询:
select
LinkId,
LinkName,
CategoryId,
ReportLinks
SubmissionStatus,
convert(nvarchar(18), LnkSubmsnDate) as LnkSubmsnDate,
convert(nvarchar(18), LnkUpdateDate) as LnkUpdateDate,
LnkSubmtdBy,
K.KeyWord,
RenewalDate
from tbl_Link L
left join Tbl_keywords K
on L.KeywordID = K.KeywordID
where
(SubmissionStatus = 'Approved' or SubmissionStatus = 'Waiting for Approval')
and LnkSubmtdBy ='swapna'
and Convert(Char(4), LnkSubmsnDate, 100) in (
select Convert(Char(4), LnkSubmsnDate, 100)
from tbl_Link
)
order by
case when RenewalDate is null then 1 else 0 end,
RenewalDate
【问题讨论】:
-
RenewalDate列中有索引吗? -
没有。但是刚刚完成索引,让我们看看会发生什么,CREATE INDEX PIndex ON tbl_Link (RenewalDate)
-
我已经完成索引但没有效果,Pindex(Non-Unique,Non-Clustered) 但性能没有提高,同样是 2.22 min@JapzDivino
-
你能发布两个查询的执行计划,有和没有排序吗?另外,这个条款到底是什么——
Convert(Char(4), LnkSubmsnDate, 100) in (select Convert(Char(4), LnkSubmsnDate, 100) from tbl_Link)——应该做什么?tbl_Link.LnkSubmsnDate中的任何值怎么可能不满足这个标准?您正在检查同一张表中的同一列。
标签: sql sql-server