Wenn Sie Ihre Experimente erweitern, werden Sie ein solches Verhalten von MS-Access mehr sehen.
Die Beobachtung wird hier in einer MS-Access-Datenbank von 4 Millionen Zeilen reproduziert, die verwendet wird, um einen CSV-Import zu einem SQL-Server zu transportieren.
Wenn Sie alle nicht indizierten Felder mit einer Sortierreihenfolge auswählen, dauert die Ausführung von MS-Access 3 Minuten. Wenn Sie ein indiziertes Feld auswählen, dauert es Sekundenbruchteile. Wenn TOP 1 des indizierten Feldes ausgewählt wird, dauert es erneut 3 Minuten, was beweist, dass die Funktion den verfügbaren Index nicht verwendet. Der Cheat (SELECT TOP 1 BLOCKID FROM (SELECT BlockID FROM AvailabilityBlocks ORDER BY BlockID)
benutzt den Index ebenfalls nicht und benötigt ebenfalls 3 Minuten.
Meine Erklärung ist, dass MS-Access native "Jet-Engine" -Funktionalität hat, die für einige Verwendung akzeptabel ist (ich benutze immer noch MS-Access auf einigen leichten Websites). Die "Jet-Engine" unterstützt alle Funktionen des visuellen Abfragedesign-Bildschirms. Ab Office 2007 wurde eine weitere Funktionalitätsebene hinzugefügt, um die SQL-Sprache mit T-SQL kompatibel zu machen.
Die Anweisung 'TOP 1' ist eine dieser 'neuen' Funktionen. Wie Sie sehen können, wird es im visuellen Design nicht unterstützt. Es ist klar, dass diese Funktion nicht erstellt wird, um den vorhandenen Index zu verwenden.
Sie können Ihren Code Düsentriebwerk Funktionalität begrenzen in 'options for Access'-> 'Design for objects' -> 'Query design' -> 'Compatibility with SQL server (ANSI 92).'
Eine weitere Möglichkeit, Ihre Investitionen in MS-Access zu schützen, ist, die Daten zu einer ODBC-Datenbank (MySQL, SQL-Server, Oracle ...) zu migrieren und benutze MS-Access nur als Frontend. Die Ansicht mit "Top 1" kann dann von einer optimierten Engine gerendert werden.
Randnotiz, warum tun Sie so viele Daten in Access haben Sie Ärger bringen für Ärger alle Daten jederzeit beim Zugang –
Ihr Titel sagt '* SELECT' aber Sie tun 'Select BlockID' . Wenn Sie nicht nur eine Spalte haben, sind diese nicht dasselbe (nicht, dass es für diese Frage wichtig wäre). –