## Bereichsbedingung

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

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 SQL-Tutorial.

Siehe auch:

EXPLAIN-Anweisung

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