-2

SQL Server でこの単純な SQL クエリの実行時間を短縮するにはどうすればよいですか?

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

38,681 行近くあり、10 分 23 秒近くかかります。テーブルには 50 の列があり、時間を短縮するためにすべての列にインデックスを作成しましたが、nolock オプションと利用可能なすべてのソリューションでチェックしても実行時間を短縮できませんでした。

問題は何ですか?

4

3 に答える 3

0

多くの情報を提供していませんが、OR を 2 つのクエリの結合に分割すると、多くの場合に役立ちます (オプティマイザーは 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;
于 2013-06-11T13:01:07.677 に答える
0

SUSER_SNAME() 関数が何をするのか疑問に思っています。今ではすべての行で実行されます。その関数の戻り値をパラメーターに取得してから、クエリを実行できますか?

関数のコストが高い場合、これにより実行時間が大幅に短縮されます。

編集。一部のSQL句を投稿できない理由と投稿できるいくつかの理由を誰か教えてもらえますか? DECLARE 構文を投稿できません。

于 2013-06-11T13:29:13.797 に答える