SQL查询耗时太长 - 有助于提高性能

Gre*_*reg 0 sql t-sql sql-server sql-server-2008

我正在运行存储过程,其中我有以下查询

SELECT TOP 1 @TopValue = t2.myDecimal

from table1 t1, table2 t2

where t1.ID = t2.table1ID

and CONVERT( VARCHART(8), t1.Created, 112 ) = @stringYYYYMMDD

and t1.Term = @Label"
Run Code Online (Sandbox Code Playgroud)

TopRate是十进制(8,6)stringYYYYMMDD是一个字符串,表示格式为YYYYMMDD的日期标签是一个简单的varchar(8)

为我的数据集的每一行调用此查询,可以是10到5000.如果我对此查询发表评论,则过程执行时间不到2秒.包含查询后,它永远不会结束.

我正在使用Microsoft SQL Server管理工作室2008 R2

谢谢您的帮助

Gor*_*off 5

首先,您应该使用显式join语法.其次,只要你top没有一个人,就会产生怀疑order by.所以,我认为你的查询是:

select TOP 1 @TopValue = t2.myDecimal
from table1 t1 join
     table2 t2
     on t1.ID = t2.table1ID
where CONVERT( VARCHART(8), t1.Created, 112 ) = @stringYYYYMMDD and t1.Term = @Label"
Run Code Online (Sandbox Code Playgroud)

您可以使用某些索引加快速度.但是,在此之前,您想要更改日期比较:

where t1.Created >= convert(datetime, @stringYYYYMMDD, 112) and
      t1.Created < convert(datetime, @stringYYYYMMDD, 112) + 1 and
      t1.Term = @Label
Run Code Online (Sandbox Code Playgroud)

将函数从列移动到常量会使比较"sargable",这意味着可以使用索引.

接下来,创建索引table1(Term, Created, Id)table2(table1Id).这些索引应该提高性能.