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
谢谢您的帮助
首先,您应该使用显式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).这些索引应该提高性能.
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |