Where-Bedingung

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

In aller Regel sollten alle einschränkenden Bedingungen in die Where-Klausel aufgenommen werden. Die Datenbank kann so den Schlüssel oder Indizes nutzen und die Netzlast für die Übertragung von Datensätzen ist am geringsten.

Übergabe nicht einschränkender Felder

  • Selbst wenn die Datenmenge durch die Angabe eines Feldes nicht eingeschränkt wird (wenn immer der gleiche Wert im Feld steht), kann dies eine Performanceverbesserung bringen, wenn dieses Feld in einem Index (oder sogar im Key selber) verwendet wird.

Where-Felder nicht übergeben

  • Vorsicht bei einem Inner-Join welchen Weg der Datenbankoptimizer einschlägt, um die Datenmenge schrittweise zu verkleinern.
  • In seltenen Fällen ist es vorteilhaft die Where-Bedingung um Bedingungen zu bereinigen, um die Datenbank dazu zu "zwingen", einen bestimmten Weg zu gehen, von dem man aufgrund der Datenmengen (über SE16) weiß, das er der optimale Weg ist - und dann die anderen Bedingungen außerhalb des Inner-Joins abzufragen.

Reihenfolge Where-Felder

  • Sehr umstritten ist, ob es einen Performancevorteil bringt, wenn man die Select- und Where-Felder eines SQL-Statements in der Reihenfolge angibt, in der sie auf der Datenbank stehen. Ob das einen Vorteil bringt, hängt sicher von der Datenbank und dessen Release-Stands ab. Es hat mir jedoch ein fähiger Basisbetreuer versichert, dass das (in einer Oracle-Umgebung) sehr große Auswirkungen auf die Performance haben kann. Wenn z. B. die Felder in der Where-Bedingung nicht in der Reihenfolge angegeben sind, wie sie im Index definiert sind, könnte es passieren, dass dieser Index vom Datenbankoptimizer nicht gefunden wird.
  • Eigene Erfahrungen, die die Relevanz der Reihenfolge der abgefragten Felder bestätigen, habe ich nicht. Schaden kann es sicher nicht, die Felder in der Reihenfolge anzugeben, in der sie auch in der Tabelle stehen.