1

次のクエリを最適化する必要があります。大規模なテーブルスキャンを実行しているため、問題を引き起こしているのは存在しない部分であることは知っていますが、私はこれが初めてです。誰かアドバイスをいただけますか?

select count(*)
from Job j
where company = 'A'
and branch = 'Branch123'
and engineerNumber = '000123'
and ID > 60473
and not exists(
select JobNumber, Company, Branch
from OutboundEvents o
where o.JobNumber = j.JobNumber
    and o.branch = j.branch
    and o.company = j.company
    and o.Formtype = 'CompleteJob')
4

2 に答える 2

7
create index [<indexname>] on [Job] (
    [company], [branch], [engineerNumber], [ID]) include ([JobNumber]);
create index [<indexname>] on [OutboundEvents] (
    [company], [branch], [JobNumber], [Formtype]);

最適化するのはクエリではなく、最適化するデータ モデルです。インデックスの設計を読むことから始めます。

于 2012-09-26T13:18:34.337 に答える
0

皆様の有益な洞察に感謝します。学ぶべきことがたくさんあります :) このクエリを使用して、実行時間を 1 分 7 秒から 1 秒弱に短縮することができました。

select count(*)
from job
where company = 'A'
and branch = 'Branch123'
and EngineerNumber = '000123'
AND id> 60473
AND JobNumber not in(
    select Jobnumber from outboundevents b
    where b.company = 'A'
    AND b.Branch = 'Branch123'  
    and b.Formtype = 'CompleteJob'
    and jobnumber in (
        select jobnumber from Job
        where company = 'A'
        and branch = 'Branch123'
        and engineerNumber = '000123'
        and ID > 60473)
)
于 2012-09-26T15:35:27.947 に答える