Wenn Du dem Optimizer eine logische Datei angibst, dann interessiert ihn das relativ wenig.
Das SQL-Statement wird im Untergrund umgeschrieben. Dabei nimmt der Optimizer aus der DDS Beschreibung lediglich die Feld-Auswah, Join-Anweisungen und Select/Omit-Anweisugen, und schreibt das SQL Statement basierend auf diesen Informationen um. Der Schlüssel der logischen ist an dieser Stelle schnutzpiepegal. Die logische Datei wird wie eine View (immer ungeschlüsselt!) behandelt. Die eigentliche Optionierung beginnt erst nach dem Umschreiben. Zu diesem Zeitpunkt ist nicht mehr bekannt, dass eine logische Datei mit einem Schlüssel vorgegeben war. Wird die logische Datei genommen, ist es nichts weiter als Zufall.

Indices werden von dem Optimizer verwendet um schnell auf die Daten zugreifen zu können.
Übrigens mit SQL kann man einen Index nicht direkt ansprechen, aber man kann einen Index mit Native I/O (in RPG und COBOL) wie eine beliebige Datei (F-Bestimmungen / Chain / SetLL / Read ...) verarbeiten.

Um Dein Statement zu optimieren, müsste man
a) das Statement zunächst einmal sehen auch hier können Probleme liegen, dergestalt, dass SQL zwar die Sätze findet, jedoch keinen Index verwenden kann.
b) die vorhandenen Zugriffswege kennen
c) die Daten bzw. Datenzusammensetzung kennen um zu entscheiden, ob und welcher Index erforderlich ist.

Birgitta