2013-10-03 42 views
0

我在VB6中使用ADO訪問具有大約320,000條記錄的Microsoft Access數據庫中的表。帶連接的SQL的速度與無速度的差異?

下面的SQL(注意不加入)需要大約百分之三秒的時間來執行。結果是該表中的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]   

必須有一個合乎邏輯的簡單的說明這一點,我失去的東西完全明顯?

在此先感謝!

+0

可能是第一個查詢中的(SubType = 3和AvailableForSPs = True)約束?無論如何,這兩個查詢在功能上看起來並不相同...... –

+0

「SubType = 3和AvailableForSPs = True」條件是連接表的一部分! (位置) – user1801904

+0

既有'Availabilityblocks.LocationID'和'Location.LocationID'索引字段? – Linger

回答

0

就我所知,LEFT JOIN比INNER JOIN慢。你需要LEFT JOIN嗎?換句話說,你的鑰匙是否有空位?

+0

LEFT和INNER的區別加入類型是邊緣的,是的,內部速度更快,但加入後仍需要大約9秒的時間才能運行vs 3個連接! – user1801904

+0

您的外鍵索引? –

+0

是的,它是....重申我上面評論,減速只發生在我把條件放在連接表上時! – user1801904