Anfang des Inhaltsbereichs

Hintergrunddokumentation Bereichsbedingung Dokument im Navigationsbaum lokalisieren

Bereichsbedingungen sind Suchbedingungen mit Vergleichsprädikat oder BETWEEN-Prädikat. Für den SQL-Optimierer gelten folgende Einschränkungen für Bereichsbedingungen:

     Operatoren sind nur die Vergleichsoperatoren < | <= | => | > und der Operator BETWEEN

     Bereichsbedingungen haben eine der folgenden Formen:
<column_spec> < < | <= | => | > > <extended_value_spec>

oder
<column_spec> BETWEEN <extended_value_spec> AND <extended_value_spec>

Nur Bereichsbedingungen, die diesen Festlegungen genügen, kann der SQL-Optimierer zum Ermitteln einer optimalen Suchstrategie auswerten.

Ob der Bereich durch einen BETWEEN-Operator oder durch Kombination der Vergleichsoperatoren <= und => begrenzt wird, ist für die Suchstratgie unerheblich.

Bedingungen der folgenden Form werden, wenn möglich, in einen Ausdruck ohne NOT mit entsprechend negiertem Operator überführt:

...NOT (<column_spec> < < | <= | => | > > <extended_value_spec>)

...NOT (<column_spec> NOT BETWEEN <extended_value_spec> AND <extended_value_spec>)

Die umgeformte Bedingung wird dann vom SQL-Optimierer weiterverarbeitet.

Beispiele

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

Konzepte des Datenbanksystems, Objekte im Schema HOTEL

Beispiel

SELECT * FROM hotel.customer
  WHERE name BETWEEN
'B' AND 'P' AND firstname = 'Greg'

Qualifikation: name BETWEEN 'B' AND 'P' And firstname = 'Greg'
Primärschlüssel der Tabelle CUSTOMER:
cno
Indizes über qualifizierte Spalten:
FULL_NAME_INDEX (name, firstname)
genutzte Suchstrategie:
TABLE SCAN

Der Index FULL_NAME_INDEX (name, firstname) könnte genutzt werden, da für die Spalten NAME und FIRSTNAME eine Bereichs- (BETWEEN) und eine Gleichheitsbedingung angegeben wurde. Ein TABLE SCAN wird hier gewählt, da bei einem Index-Zugriff anschließend auch auf die Basistabelle zugegriffen werden muss. Ab einer bestimmten Größe des Bereichs fallen dadurch zu viele Lesekosten an. Bei einem TABLE SCAN entfallen die Lesekosten des Index.

Ergebnis der EXPLAIN-Anweisung

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

CUSTOMER

FULL_NAME_INDEX

RANGE CONDITION FOR INDEX

40

 

 

RESULT IS NOT COPIED,
COSTVALUE IS


40

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

Siehe auch:

EXPLAIN-Anweisung

SQL-Referenzhandbuch, Vergleichsprädikat (comparison_predicate), BETWEEN-Prädikat (between_predicate)

Ende des Inhaltsbereichs