Vom Grundsatz ist ein Index beim Zugriff immer von Vorteil.
Per SQL geht das auch einfach per "create index mylib/myindex on mylib/myfile (k1, k2, ...., kn)", wobei auch jedes Keyfeld sowohl ASCEND als auch Descend sortiert sein kann.
Ein Index ist eigentlich immer erforderlich, sobald im SQL eine Where- oder Order-By-Klausel verwendet wird.
Die einfachste Regel hierbei ist:
Ein Index mit den Feldern und der Reihenfolge der Where/Order-Klausel.

Bei Joins wirds da etwas komplizierter, aber auch da gilt im Wesentlichen obige Regel:
Über die Bezüge des Joins ist je Tabelle ein Index anzulegen.

Ein Index wird von der AS/400 permanent mitgepflegt und fällt kaum auf.
Bestehende Programme merken auch davon nichts.

Was die Satzsperre angeht: ein Select interessiert sich im Normalfall nicht dafür (weiteres siehe Commitlevel), wohl aber ein Update/Delete.
RPG kann keine Datei sperren, wohl aber ein vorgeschaltetes Kommando ALCOBJ (ggf. per CL-Programm).
Der Select schlägt dann fehl mit einem ODBC/JDBC-Fehler (Cursor nicht geöffnet).
Hier kann ggf. die Dateiwartezeit (Default 60 Sekunden) zuschlagen.

Was den JDBC-Zugriff schneller macht ?
Auch hierzu gibts mehrere Beiträge, im Wesentlichen jedoch folgendes:
- Prepared Statements
- Parametermarker