如果不添加ORDER BY RenewalDate
,则需要1秒钟。在添加ORDER BY
条款时,它花了2.22分钟。我对这个coloumn做了索引但没有改进性能.Pindex(非唯一,非群集)
如何在不降低性能的情况下使用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
答案 0 :(得分:0)
你有这个问题,因为它是逐行检查RenewalDate
,如果你想使用它,也许你可以在RenewalDate
列中放一个索引。
case when RenewalDate is null then 1 else 0 end,
RenewalDate
答案 1 :(得分:0)
而不是:
and Convert(Char(4), LnkSubmsnDate, 100) in (
select Convert(Char(4), LnkSubmsnDate, 100)
from tbl_Link
使用此:
and exists(
select (1)
from tbl_Link TL
where Convert(Char(4), TL.LnkSubmsnDate, 100) = Convert(Char(4), L.LnkSubmsnDate, 100))
答案 2 :(得分:0)
您需要的是两个表上的唯一聚簇索引(在创建任何非聚集的indizes之前创建)。也许tbl_Link.LinkId
和Tbl_keywords.KeywordID
是唯一聚集索引的候选者,可以分别作为主键。
第一次非聚集指数:
tbl_Link.KeywordID
上的一个是个好主意 - 因为它是您的JOIN列,您与表Tbl_keywords
的连接。
进一步考虑索引列:
SubmissionStatus
LnkSubmtdBy
LnkSubmsnDate
RenewalDate
请注意:不支持指数只有在在聚集索引之后创建
时才会表现良好