Beschränkungen für Indizes
Für Indizes gelten bestimmte Grenzen.
Die maximale Länge eines Schlüssels in einem Index ist auf ¼ der Seitengröße begrenzt.
Für Indizes gelten bestimmte Grenzen.
Die maximale Länge eines Schlüssels in einem Index ist auf ¼ der Seitengröße begrenzt.
Die Anzahl der Indizes, die für jede Tabelle untergebracht werden können, ist begrenzt.Das tatsächliche Maximum für eine bestimmte Tabelle hängt von der Seitengröße und der Anzahl der Spalten in den Indizes ab.
Seitengröße (Page size) |
Anzahl der Indizes abhängig von der Spaltenanzahl |
||
---|---|---|---|
Einspaltig |
Zweispaltig |
Dreispaltig |
|
4096 |
203 |
145 |
113 |
8192 |
408 |
291 |
227 |
16384 |
818 |
584 |
454 |
32768 |
1637 |
1169 |
909 |
Die maximale Länge der indizierten Zeichenfolge beträgt 9 Byte weniger als die maximale Schlüssellänge.Die maximale Länge der indexierbaren Zeichenfolge hängt von der Seitengröße und dem Zeichensatz ab.
Seitengröße (Page size) |
Maximale Länge der indizierbaren Zeichenfolge nach Zeichensatztyp |
|||
---|---|---|---|---|
1 Byte/Zeichen |
2 Bytes/Zeichen |
3 Bytes/Zeichen |
4 Bytes/Zeichen |
|
4096 |
1015 |
507 |
338 |
253 |
8192 |
2039 |
1019 |
679 |
509 |
16384 |
4087 |
2043 |
1362 |
1021 |
32768 |
8183 |
4091 |
2727 |
2045 |
Note
|
Abhängig von der Sortierung kann die maximale Größe weiter reduziert werden, da Sortierungen ohne Unterscheidung zwischen Groß- und Kleinschreibung mehr Bytes pro Zeichen in einem Index benötigen.Siehe auch Zeichen-Indizes im Kapitel Datentypen und Untertypen. |
CREATE INDEX
Erstellen eines Index für die Spalte UPDATER_ID
in der Tabelle SALARY_HISTORY
CREATE INDEX IDX_UPDATER
ON SALARY_HISTORY (UPDATER_ID);
Erstellen eines Index mit in absteigender Reihenfolge sortierten Schlüsseln für die Spalte CHANGE_DATE
in der Tabelle SALARY_HISTORY
CREATE DESCENDING INDEX IDX_CHANGE
ON SALARY_HISTORY (CHANGE_DATE);
Erstellen eines Multi-Segment-Index für die Spalten ORDER_STATUS
, PAID
in der Tabelle SALES
CREATE INDEX IDX_SALESTAT
ON SALES (ORDER_STATUS, PAID);
Erstellen eines Index, der keine doppelten Werte für die Spalte NAME
in der Tabelle COUNTRY
zulässt
CREATE UNIQUE INDEX UNQ_COUNTRY_NAME
ON COUNTRY (NAME);
Erstellen eines berechneten Index für die Tabelle PERSONS
CREATE INDEX IDX_NAME_UPPER ON PERSONS
COMPUTED BY (UPPER (NAME));
Ein Index wie dieser kann für eine Suche ohne Beachtung der Groß-/Kleinschreibung verwendet werden:
SELECT *
FROM PERSONS
WHERE UPPER(NAME) STARTING WITH UPPER('Iv');
ALTER INDEX
Aktivieren oder Deaktivieren eines Indexes;Neuerstellung eines Index
DSQL, ESQL
ALTER INDEX indexname {ACTIVE | INACTIVE}
Parameter | Beschreibung |
---|---|
indexname |
Indexname |
Die ALTER INDEX
-Anweisung aktiviert oder deaktiviert einen Index.Diese Anweisung bietet keine Möglichkeit, irgendwelche Attribute des Indexes zu ändern.
INAKTIV
Mit der Option INACTIVE
wird der Index vom aktiven in den inaktiven Zustand geschaltet.Die Wirkung ist ähnlich wie bei der DROP INDEX
-Anweisung, außer dass die Indexdefinition in der Datenbank verbleibt.Das Ändern eines Einschränkungsindex in den inaktiven Zustand ist nicht zulässig.
Ein aktiver Index kann deaktiviert werden, wenn keine Abfragen mit diesem Index vorbereitet sind;andernfalls wird ein Fehler “object in use” zurückgegeben.
Die Aktivierung eines inaktiven Index ist ebenfalls sicher.Wenn jedoch aktive Transaktionen vorhanden sind, die die Tabelle ändern, schlägt die Transaktion mit der Anweisung ALTER INDEX
fehl, wenn sie das Attribut NOWAIT
besitzt.Wenn sich die Transaktion im WAIT
-Modus befindet, wartet sie auf den Abschluss gleichzeitiger Transaktionen.
Auf der anderen Seite der Medaille, wenn unser ALTER INDEX
erfolgreich ist und beginnt, den Index bei COMMIT
neu aufzubauen, werden andere Transaktionen, die diese Tabelle ändern, fehlschlagen oder warten, entsprechend ihren WAIT
/NO WAIT
-Attributen.Genauso verhält es sich mit CREATE INDEX
.
Note
|
Wofür ist es nützlich?
Es kann sinnvoll sein, einen Index in den inaktiven Zustand zu versetzen, während ein großer Satz von Datensätzen in der Tabelle, die den Index besitzt, eingefügt, aktualisiert oder gelöscht wird. |
AKTIV
Mit der Option 'ACTIVE' wird der Index, wenn er sich im inaktiven Zustand befindet, in den aktiven Zustand geschaltet und das System baut den Index neu auf.
Note
|
Wofür ist es nützlich?
Auch wenn der Index active ist, wenn |
Die ALTER INDEX
-Anweisung kann ausgeführt werden durch:
Der Besitzer der Tabelle
Benutzer mit dem ALTER ANY TABLE
-Privileg
ALTER INDEX
für einen EinschränkungsindexDas Ändern des Index eines PRIMARY KEY
, FOREIGN KEY
oder UNIQUE
Constraints in INACTIVE
ist nicht erlaubt.ALTER INDEX … ACTIVE
funktioniert jedoch bei Constraint-Indizes genauso gut wie bei anderen, als Werkzeug zum Neuaufbau von Indizes.
Deaktivieren des IDX_UPDATER
-Index
ALTER INDEX IDX_UPDATER INACTIVE;
Den IDX_UPDATER
-Index zurück in den aktiven Zustand schalten und neu aufbauen
ALTER INDEX IDX_UPDATER ACTIVE;
DROP INDEX
Einen Index löschen (löschen)
DSQL, ESQL
DROP INDEX indexname
Parameter | Beschreibung |
---|---|
indexname |
Indexname |
Die DROP INDEX
-Anweisung löscht (löscht) den benannten Index aus der Datenbank.
Note
|
Ein Einschränkungsindex kann nicht mit |
Die DROP INDEX
-Anweisung kann ausgeführt werden durch:
Der Besitzer der Tabelle
Benutzer mit dem ALTER ANY TABLE
-Privileg
IDX_UPDATER
-IndexDROP INDEX IDX_UPDATER;
SET STATISTICS
Neuberechnung der Selektivität eines Index
DSQL, ESQL
SET STATISTICS INDEX indexname
Parameter | Beschreibung |
---|---|
indexname |
Indexname |
Die Anweisung SET STATISTICS
berechnet die Selektivität des angegebenen Index neu.
Die Anweisung SET STATISTICS
kann ausgeführt werden durch:
Der Besitzer der Tabelle
Benutzer mit dem ALTER ANY TABLE
-Privileg
Die Selektivität eines Index ergibt sich aus der Auswertung der Anzahl der Zeilen, die bei einer Suche nach jedem Indexwert ausgewählt werden können.Ein eindeutiger Index hat die maximale Selektivität, da es unmöglich ist, mehr als eine Zeile für jeden Wert eines Indexschlüssels auszuwählen, wenn dieser verwendet wird.Die Selektivität eines Index auf dem neuesten Stand zu halten ist wichtig für die Auswahl des Optimierers bei der Suche nach dem optimalsten Abfrageplan.
Indexstatistiken in Firebird werden als Reaktion auf große Mengen von Einfügungen, Aktualisierungen oder Löschungen nicht automatisch neu berechnet.Es kann von Vorteil sein, die Selektivität eines Index nach solchen Operationen neu zu berechnen, da die Selektivität dazu neigt, veraltet zu werden.
Note
|
Die Anweisungen |
Es kann unter gleichzeitiger Last ohne Beschädigungsrisiko ausgeführt werden.Beachten Sie jedoch, dass die neu berechneten Statistiken bei gleichzeitiger Belastung veraltet sein können, sobald SET STATISTICS
beendet ist.
IDX_UPDATER
SET STATISTICS INDEX IDX_UPDATER;