## Verlagerung der Suche auf den FETCH-Zeitpunkt

Der SQL-Optimierer versucht, nur dann Ergebnistabellen zu bilden, wenn es unbedingt notwendig ist.

Wenn keine Ergebnistabelle aufgebaut werden muss, kann die Suche auf den FETCH-Zeitpunkt verlagert werden. Dadurch wird kein Speicher für Ergebnisse belegt, und auf die ersten Ergebnisse kann schnell zugegriffen werden.

### Ergebnistabelle wird erzeugt

Die Suche kann jedoch nicht immer auf den FETCH-Zeitpunkt verlagert werden, da in einigen Fällen immer eine Ergebnistabelle aufgebaut werden muss:

● SELECT auf mehrere Tabellen (Join)

● SELECT ... FOR REUSE

In den folgenden Fällen muss meistens eine Ergebnistabelle aufgebaut werden:

● SELECT DISTINCT ...

● SELECT ... ORDER BY ...

### Ergebnistabelle wird nicht erzeugt

Wenn alle folgenden Bedingungen zutreffen, muss keine Ergebnistabelle aufgebaut werden:

● Weder eine DISTINCT-Spezifikation (bis auf einige Ausnahmen) noch das Syntaxelement FOR REUSE sind angegeben.

● Die Spalten, nach denen sortiert werden soll, bilden zusammen in der angegebenen Reihenfolge und Sortierung (aufsteigend oder absteigend) einen Index.

### Beispiele

Die bei den Erläuterungen zum SQL-Optimierer verwendeten Beispiele stützen sich auf die Demo-Datenbank DEMODB und ihre Demo-Daten im Schema HOTEL.

Konzepte des Datenbanksystems, Objekte im Schema HOTEL

Mit Hilfe der EXPLAIN-Anweisung können Sie herausfinden, ob eine Ergebnistabelle erstellt wird (Eintrag in Spalte STRATEGY: RESULT IS COPIED) oder nicht (Eintrag in Spalte STRATEGY: RESULT IS NOT COPIED).

SELECT zip, name FROM hotel.city
WHERE ROWNO < 5
ORDER BY name, zip DESC

Qualifikation: ROWNO < 5 ORDER BY name, zip DESC
Primärschlüssel der Tabelle CITY: zip
Indizes über qualifizierte Spalten: keine
genutzte Suchstrategie: TABLE SCAN

Ergebnis der EXPLAIN-Anweisung

TABLENAME | COLMUN_OR_INDEX | STRATEGY | PAGECOUNT
CITY |  | TABLE SCAN | 11
|  | RESULT IS COPIED COSTVALUE IS | 3

Es wird eine Ergebnistabelle erstellt (RESULT IS COPIED).

Weitere einfache Beispiel-SQL-Anweisungen finden Sie im SQL-Tutorial.

Siehe auch:

Suchstrategien

Suchstrategien für Joins

Liste aller Suchstrategien

SQL-Referenzhandbuch, FETCH-Anweisung (fetch_statement), DISTINCT-Spezifikation (distinct_spec), SELECT-Anweisung (select_statement)