查询执行时间减少

时间:2013-06-11 12:49:00

标签: sql sql-server time execution

如何在SQL Server中减少这个简单SQL查询的执行时间?

select * 
from companybackup  
where tiRecordStatus = 1
and (iAccessCode < 3 or chUpdateBy = SUSER_SNAME())

它有近38,681行,耗时近10分23秒。该表有50列,甚至我在所有列上创建索引以减少时间但是没有成功,即使我使用nolock选项和所有可用的解决方案检查但是无法减少执行时间。

可能是什么问题?

3 个答案:

答案 0 :(得分:0)

如果这是一个关键查询,您可以创建一个专门为它设计的索引:

CREATE INDEX ix_MyIndexNameHere ON CompanyBackup 
           (tiRecordStatus, iAccesscode, chUpdateBy)

这仍然需要键查找,因为你返回的所有字段都是*,但它比一堆单字段索引好很多。

答案 1 :(得分:0)

您没有提供太多信息,但将OR拆分为两个查询的并集通常会有所帮助(优化者在使用OR时遇到问题):

select * 
from companybackup  
where tiRecordStatus = 1
and iAccessCode < 3
union
select * 
from companybackup  
where tiRecordStatus = 1
and chUpdateBy = SUSER_SNAME())

如果这没有帮助,请尝试创建这些索引:

create index idx1 on companybackup(tiRecordStatus, iAccessCode);
create index idx2 on companybackup(chUpdateBy, tiRecordStatus);

然后强制重新计算索引值的分布:

update statistics companybackup;

答案 2 :(得分:0)

我想知道SUSER_SNAME()函数做了什么,现在它在每一行都被执行了。你能尝试将该函数返回值赋给参数然后执行查询吗?

如果功能成本高,这将大大缩短执行时间。

修改。任何人都可以告诉我为什么我不能发布一些SQL条款,有些我可以吗?无法发布DECLARE语法。