擴展您的實驗時,您將以更多方式看到MS-Access的這種行爲。
觀察結果在這裏轉載在一個MS-Access數據庫中,用於將CSV導入傳輸到SQL服務器。
使用排序順序選擇全部無索引字段MS-Access需要3分鐘才能執行。選擇全部索引字段時,需要分割秒。當選擇索引字段的TOP 1時,它再次需要3分鐘,這證明該函數沒有使用可用的索引。作弊(SELECT TOP 1 BLOCKID FROM (SELECT BlockID FROM AvailabilityBlocks ORDER BY BlockID)
也沒有使用索引,也需要3分鐘。
我的解釋是,MS-Access具有本地「噴氣引擎」功能,可以接受某些用途(我仍然在一些輕量級網站上使用MS-Access)。 '噴氣引擎'支持視覺查詢設計屏幕的所有功能。從Office 2007開始,添加了另一層功能以使SQL語言與T-SQL兼容。
'TOP 1'聲明是這些'新'功能之一。正如你可以看到它在視覺設計中不被支持。很顯然,這個函數不是爲了利用現有的索引而創建的。
你可以限制你的代碼到噴氣發動機的功能在'options for Access'-> 'Design for objects' -> 'Query design' -> 'Compatibility with SQL server (ANSI 92).'
,以保護您的投資在MS-訪問另一個選擇是將數據遷移到ODBC數據庫(MySQL和SQL服務器,甲骨文...)並僅將MS-Access用作前端。 'top 1'的視圖可以通過更優化的引擎渲染。
旁註爲什麼你在訪問如此多的數據,你就是自找麻煩 –
你的標題說,'SELECT *'但是你在做'選擇BlockID' 。除非你只有一列,否則它們不是同一個東西(不是對這個問題應該重要)。 –