我实现了如下所述的SQL查询
SELECT OLT.status,
OLT.queuedate,
( CONVERT(VARCHAR(10), OLT.queuedate, 101)
+ ' '
+ Stuff(RIGHT(CONVERT(VARCHAR(30), OLT.queuedate, 109), 14), 9, 4, ' ')
)
FROM onlineresults OLT WITH(nolock)
LEFT JOIN roadmap CR WITH(nolock)
ON OLT.roadmapid = CR.content_roadmap_id
OnlineResults只有1,43000条记录,但完成上述查询需要近5分钟。
我们是否有其他方法可以通过创建索引来加快查询速度
Onlineresults表的架构
OnlineID (Primary Key)
RoadmapId
StudentId
SectionId
Status
Retries
QueueDate
路线图表中有许多字段,而content_roadmap_id是主键
答案 0 :(得分:0)
是索引会影响结果。
你可以做点什么 1.检查两列是否有pk或索引,如果不是,则在其上创建。始终使用pk值来过滤数据。当您的查询占用太多时,还要尝试尽可能多地过滤数据。
向表中添加计算列并在此列上创建索引。
ALTER TABLE MyTable
Add Column queuedateCalculated As (CONVERT(VARCHAR(10), OLT.QueueDate , 101)
Then create an index on this.
CREATE INDEX queuedateCalculatedIdx ON MyTable.queuedateCalculated
参考链接 SQL Server - index on a computed column?
请检查两个条件的执行计划..这里是了解索引计划的好文章。
https://sqlserverfast.com/?s=user+defined+ugly
或者您也可以创建索引视图。
http://www.codeproject.com/Articles/199058/SQL-Server-Indexed-Views-Speed-Up-Your-Select-Quer