Hallo R. Unverzagt,
also in der Beziehung ist mir nichts bekannt, daß man am Abfrage-Optimizer etwas ändern kann/sollte. Es handelt sich dabei ja um einen Teil des Datenbanksystems, und man "konfiguriert" ihn durch Erstellen von Schlüsseln/Indizes. Und man kann ihn durch Anlegen ungünstiger, zu vieler oder zu breiter Schlüssel gehörig durcheinander bringen. Auch andere Faktoren, wie die Anzahl von Datensätzen beeinflußt die Arbeitsweise des Optimizers.
Wenn es denn überhaupt möglich ist, die Arbeitsweise der DB an dieser Stelle zu beeinflussen, dann ist das sicher DB-abhängig und außerdem "Hohe Schule".
Eine Möglichkeit gibt es allerdings schon; es handelt sich da um eine Art Dienstleistung, die der Mensch gegenüber seinem DB-System eventuell regelmäßig erbringen muß:
Es gibt hauptsächlich zwei verschiedene Arten von Abfrage-Optimizern:
- regelbasierte und
- kostenbasierte
Optimizer. Das ist vom Datenbanksystem abhängig: Oracle setzt einen regelbasierten, Informix bspw. einen kostenbasierten Optimizer ein.
Bei kostenbasierten Optimizern ist es häufiger nötig, ein UPDATE STATISTICS (auf SQL-Ebene) durchzuführen, damit die angelegten Indizes überhaupt passend angewendet werden können. Meistens werden solche Jobs in SAP-Systemen bzw. vom DB-System standardmäßig eingeplant. Vielleicht passiert das ja auf dem Testserver gar nicht (???).
Ich denke, der Grund dafür, daß das Performanceproblem auf den Kundensystemen nicht auftritt, liegt einfach darin, daß dort der jeweilige Abfrage-Optimizer den zu langen Schlüssel nicht auswählt. Die Ursache dafür wiederum kann darin liegen, daß auf der Tabelle noch andere Schlüssel liegen, die auf Kunden- und Testsystem vielleicht nicht identisch sind, so daß der Optimizer vielleicht einen anderen Schlüssel wählt.
Eine weitere Möglichkeit der Erklärung wäre diese: Wenn in der betreffenden Tabelle vorher eine große Anzahl von Datensätzen enthalten war, dann der Schlüssel/Index angelegt wurde, und danach ein großer Teil der Datensätze gelöscht wurde, so ist der Index jetzt eventuell stark fragmentiert. Dann sollte man ihn löschen und neu anlegen (se11, Hilfsmittel, DB-Utility).
Nach wie vor bin ich der Ansicht, daß ein Tabellenschlüssel, der über 13 Spalten geht, zu breit ist.
Vielleicht bringt's ja etwas: UPDATE STATISTICS und/oder Index löschen/neu anlegen. Vorher würde ich mich immer vergewissern, ob meine Datensicherung i.O. ist.
Viel Erfolg!
Gruß Jörg