需要帮助来优化带数据函数的SQL select查询

时间:2014-05-26 06:05:14

标签: sql-server

我实现了如下所述的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是主键

1 个答案:

答案 0 :(得分:0)

是索引会影响结果。

你可以做点什么 1.检查两列是否有pk或索引,如果不是,则在其上创建。始终使用pk值来过滤数据。当您的查询占用太多时,还要尝试尽可能多地过滤数据。

  1. queuedate 列上,使用投射结果为索引提供更快的结果。或者创建一个值为的新列(CONVERT(VARCHAR(10),OLT.QueueDate,101)
  2. 向表中添加计算列并在此列上创建索引。

    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://www.sqlskills.com/blogs/jonathan/finding-what-queries-in-the-plan-cache-use-a-specific-index/

    https://sqlserverfast.com/?s=user+defined+ugly

    或者您也可以创建索引视图。

    http://www.codeproject.com/Articles/199058/SQL-Server-Indexed-Views-Speed-Up-Your-Select-Quer