Hey,
es gibt viele Möglichkeiten sich die Daten zu holen. Am schnellsten ist sicherlich eine passende
SQL zu formulieren. Was macht es für einen Sinn, 500000 Records vom Server zum Client zu schicken (genau das passiert wenn der Cursor Clientseitig läuft). Kein Mensch sucht dein DBGrid mit 500000 Records ab. Formuliere einfach deine Abfrage genauer. 10 Records oder vielleicht ein paar mehr sind grad noch zumutbar manuell zu durchlaufen, mehr sollten es nicht sein.
Und genau bei solchen Abfrage greift dein Index, und nicht etwa in Delphi beim Anzeigen von 500000 Records.
Bsp:
Select RechnungNr, Betrag from Rechungen where RechnungNr = 1234
durchläuft in der Tat auch auf dem Server deine ganze Datenbank sequentiell durch um nachher vielleicht einen zu finden. Nicht gerade effektiv. Bei einem Index geht eben genau das schneller, da die Spalte RechnungNr dann sortiert auf dem Server verwaltet wird. Das Suchen in einer sortierten Liste ist um Einiges effektiver. Bei 500000 Records sind maximal 19 Vergleiche nötig, um die Rechnungnr eindeutig zu finden.
Gruss,
Tom