0

VB6 で ADO を使用して、約 320,000 レコードを持つ Microsoft Access データベースのテーブルにアクセスしています。

次の SQL (結合がないことに注意してください) は、実行に約 100 分の 3 秒かかります。結果は、そのテーブルの 320,000 の 492 レコードです!

Select * 
From AvailabilityBlocks 
Where [Begin] > #02-Oct-2013 12:00:00 AM# AND 
      (AvailabilityBlocks.Type = 2 OR 
      AvailabilityBlocks.Type = 3 OR 
      AvailabilityBlocks.Type=4) 
AND ResourceID = 59 
ORDER By [Begin], [End]

ただし、次の SQL の実行には約 11 秒かかります。結果は、320k レコードのうち 363 です。

Select * 
From AvailabilityBlocks 
LEFT JOIN Location 
    ON Availabilityblocks.LocationID=Location.LocationID 
Where [Begin] > #02-Oct-2013 12:00:00 AM# AND 
         (AvailabilityBlocks.Type = 2 OR 
         AvailabilityBlocks.Type = 3 OR 
         AvailabilityBlocks.Type=4) AND 
     (SubType=3 and AvailableForSPs=True) AND 
     ResourceID = 59 
     ORDER By [Begin], [End]        

これには論理的で簡単な説明が必要です。完全に明らかな何かが欠けていますか?

前もって感謝します!

4

1 に答える 1

0

私の知る限り、LEFT JOIN は INNER JOIN よりも遅いです。LEFT JOINが必要ですか?つまり、キーにヌルはありますか?

于 2013-10-03T13:47:59.670 に答える