Hallo TS,
Aber z. B. zehn Zugriffe über den Index würde schon eine erhebliche Indextiefe (Spezifität) bedeuten, während 10 Zugriffe auf die Daten (die müssen ja totzdem die Buffersize beachten) vielleicht erst 0.1% der Datei erfasst haben.
Du hast das Kriterium missverstanden oder nicht beachtet. Der Index wird ignoriert, wenn entweder das Resultset zu groß wird, so dass ein Index-Scan sich nicht mehr lohnt oder wenn die Tabelle zu klein ist. Wenn du eine große Tabelle hast und ein kleines Resultset (10 Rows sind sehr klein), dann wird der Index benutzt. Niemand hat gesagt, dass ein Index keinen Sinn macht.
Und in meiner Vorstellung kann ein mit z. B. 128 GB RAM ausgestatter Host die auch nicht "mal eben" komplett für einen einzigen DB-Filezugriff zur Verfügung stellen, sondern muss seine Gunst verteilen. Und da gäbe es als Flaschenhals auch immer noch die maximale Datentransferrate zwischen HDD und RAM.
So funktioniert Caching auch nicht. Gecached wird, was häufig gebraucht wird. Auf einem dedizierten DB-Server ist das oft genug die vollständige Datenbank, wenn die allerdings nicht in den Speicher passt, dann sind das nur die Teile, die am häufigsten gebraucht werden. Caching funktioniert nicht so, dass bei einer einmaligen Anforderung alles in den RAM geladen wird.
Wenn du aber weiterhin auf sequential read vs random read abziehst: dann hast du immer noch die falsche Prämisse im Kopf. Bei einer großen Tabelle (ich setzte hier deine theoretischen 128gb an) und einem kleinen Resultset (ich setze hier deine 10 Rows an) wird natürlich ein Index verwendet.
Plakatives Beispiel: wenn du aber von den 128gb bei einer Abfrage 100gb der Rows zurück bekommen würdest, wird kein sinnvolles DBMS der Welt den Index verwenden.
Oder, alternativ: deine Tabelle belegt gerade mal eine Page, von denen du 10 Rows haben willst, da wäre ein Index-Zugriff völlig bescheuert.
Nach meinem Verständnis hinkt das immer noch.
Das liegt daran, dass du die Kriterien, nach denen das entschieden wird, immer noch nicht verstanden zu haben scheinst.
Aber du brauchst dich ja nicht auf mein Wort zu verlassen. PostgreSQL und MySQL haben das vorzüglich dokumentiert. Lies es dort nach.
LG,
CK