INDEX Befehl
Erzeugt eine Indexdatei, um Tabellendatensätze in einer logischen Reihenfolge anzeigen und darauf zugreifen zu können.
INDEX ON eExpression TO IDXFileName | TAG TagName [OF CDXFileName]
[FOR lExpression] [COMPACT] [ASCENDING | DESCENDING]
[UNIQUE | CANDIDATE] [ADDITIVE]
Parameter
eExpression
Gibt einen Indexausdruck an, der den Namen eines oder mehrerer Felder der aktuellen Tabelle enthalten kann. In der Indexdatei wird für jeden Datensatz in der Tabelle ein Indexschlüssel basierend auf dem Indexausdruck erzeugt. Visual FoxPro verwendet diese Schlüssel, um auf Datensätze in der Tabelle zuzugreifen und sie anzuzeigen.Anmerkung Verwenden Sie für eExpression nicht Variablen, Arrayelemente, Felder und Feldausdrücke aus einer Tabelle in einem anderen Arbeitsbereich. Beim Zugriff auf einen Index, der Variablen oder Felder enthält, die nicht mehr vorhanden sind oder nicht gefunden werden können, erzeugt Visual FoxPro eine Fehlermeldung. Memofelder können in Indexdateiausdrücken nicht alleine verwendet werden, sondern müssen mit anderen Zeichenausdrücken kombiniert sein. Wenn Sie im Indexausdruck ein Feld einbeziehen, dem der Alias einer Tabelle oder ein Arbeitsbereichbuchstabe vorangeht, erzeugt Visual FoxPro eine Fehlermeldung. Obwohl Sie FOR-Klauseln mit Hilfe der Rushmore-Technologie optimieren können wenn Aliasfelder enthalten sind, wird dennoch davon abgeraten, Aliasfelder bei der Indexerzeugung zu verwenden. In einigen Fällen (USE ... AGAIN, SQL queries usw.) kann der Tabelle automatisch ein anderer Alias zugewiesen und der Index unter Umständen nicht korrekt aktualisiert oder verwendet werden. Weitere Informationen zur Rushmore-Technologie finden Sie unter Verwenden von Rushmore zum Beschleunigen des Datenzugriffs.
Beim Versuch, einen Index mit einem Schlüssel aufzubauen, dessen Länge variiert, wird der Schlüssel mit Leerzeichen aufgefüllt. Schlüssel mit variablen Längen werden von Visual FoxPro nicht unterstützt.
Es ist möglich, einen Indexschlüssel der Länge 0 zu erzeugen. Dies ist z. B. der Fall, wenn der Indexausdruck eine Unterzeichenfolge eines Memofeldes ist. Ein Indexschlüssel der Länge 0 erzeugt eine Fehlermeldung. Wenn Visual FoxPro einen Index erzeugt, wertet es dazu Felder im ersten Datensatz der Tabelle aus. Ist ein Feld leer, kann es notwendig sein, vorübergehend Daten in dieses Feld des ersten Datensatzes einzutragen, um die Erzeugung eines Schlüsselindexes der Länge 0 zu verhindern.
Die Länge eines Indexschlüssels für einen IDX-Index muss zwischen 1 und 100 Zeichen liegen. Die Länge für einen CDX-Index muss zwischen 1 und 240 Zeichen liegen.
TO IDXFileName
Erzeugt eine IDX-Indexdatei. Die Indexdatei erhält standardmäßig die Erweiterung IDX. Dies können Sie ändern, indem Sie eine andere Erweiterung einbeziehen oder die Standardindexerweiterung in der Visual FoxPro-Konfigurationsdatei abändern. Standard-Windowsregeln für die Benennung von Dateien, einschließlich langer Dateinamen, müssen bei der Erzeugung von Indexdateien beachtet werden.TAG TagName [OF CDXFileName]
Erzeugt eine Mehrfachindexdatei. Eine Mehrfachindexdatei ist eine einzelne Indexdatei, die sich aus einer beliebigen Anzahl unabhängiger Tags (Indexeinträge) zusammensetzt. Jeder Tag ist dabei durch seinen eindeutigen Indexnamen gekennzeichnet. Indexnamen müssen mit einem Buchstaben oder einem Unterstrich beginnen und können aus einer beliebigen Kombination von bis zu 10 Buchstaben, Zahlen oder Unterstrichen bestehen. Die Anzahl der Tags in einer Mehrfachindexdatei wird nur durch den zur Verfügung stehenden Speicher und Festplattenplatz begrenzt.Mehrfachindexdateien sind immer komprimiert. Deshalb muss bei der Erzeugung einer Mehrfachindexdatei nicht COMPACT (KOMPRIMIEREN) einbezogen werden. Die Namen von Mehrfachindexdateien erhalten die Erweitung CDX.
Es können zwei verschiedene Typen von Mehrfachindexdateien erzeugt werden: strukturierte und unstrukturierte.
Wird die optionale OF-CDXFileName-Klausel nicht nach TAG TagName angegeben, erzeugen Sie eine strukturierte Mehrfachindexdatei. Eine strukturierte Mehrfachindexdatei hat denselben Basisnamen wie die Tabelle und wird beim Öffnen der Tabelle automatisch geöffnet.
Kann die strukturierte Mehrfachindexdatei einer Tabelle nicht gefunden werden oder sie wurde gelöscht oder umbenannt, wird beim Versuch die Tabelle zu öffnen ein Dialogfeld angezeigt. Wenn Sie auf die vorselektierte Schaltfläche Abbrechen drücken, wird die Tabelle nicht geöffnet. Bei Wahl von Ignorieren, wird die Tabelle geöffnet und die Kennzeichnung im Tabellenkopf, die die Anwesenheit einer verknüpften strukturierten Mehrfachindexdatei anzeigt, entfernt.
Tipp Um eine strukturierte Mehrfachindexdatei, die von ihrer Tabelle gelöst wurde, wieder mit dieser zu verknüpfen, verwenden Sie folgenden Befehl:
USE TableName INDEX CDXFileName
Wenn Sie die optionale OF-CDXFileName-Klausel nach TAG TagName angeben, erzeugen Sie eine nicht-strukturierte Mehrfachindexdatei. Im Gegensatz zu einer strukturierten Mehrfachindexdatei muss diese ausdrücklich durch SET INDEX oder die INDEX-Klausel in USE geöffnet werden.
Wurde eine Mehrfachindexdatei bereits erzeugt und geöffnet, fügt die Eingabe von INDEX mit TAG TagName der Datei eine Kennung hinzu.
CDXFileName ist der Name der losgelösten strukturierten Mehrfachindexdatei. Achten Sie darauf, die Tabelle neu zu indizieren, wenn sie seit der Loslösung der Datei verändert worden ist.
FOR lExpression
Gibt eine Bedingung ein, wodurch nur solche Datensätze, die dem Filterausdruck lExpression genügen, angezeigt werden können und zugänglich sind. Indexschlüssel werden im Indexfilter nur für die Datensätze erzeugt, die mit dem Filterausdruck übereinstimmen.Rushmore optimiert einen INDEX ... FOR lExpression-Befehl, wenn lExpression ein optimierbarer Ausdruck ist. Die beste Leistung erreichen Sie durch Verwendung eines optimierbaren Ausdrucks in der FOR-Klausel.
Weitere Informationen finden Sie unter SET OPTIMIZE und Verwenden von Rushmore zum Beschleunigen des Datenzugriffs.
COMPACT
Erzeugt eine komprimierte IDX-Datei.ASCENDING
Gibt eine aufsteigende Reihenfolge für die CDX-Datei an. Standardmäßig werden CDX-Tags in aufsteigender Reihenfolge erzeugt (Sie können ASCENDING als Gedächtnisstütze für die Reihenfolge der Indexdatei einbeziehen). Eine Tabelle kann aber durch Eingabe von DESCENDING auch in umgekehrter (absteigender) Reihenfolge indiziert werden.DESCENDING
Gibt eine absteigende Reihenfolge für die CDX-Datei an. Sie können beim Erzeugen von IDX-Indexdateien DESCENDING nicht einbeziehen. Es kann jedoch eine absteigende Reihenfolge für eine IDX-Indexdatei mit Hilfe von SET INDEX und SET ORDER spezifiziert werden.UNIQUE
Gibt an, dass nur der erste angetroffene Datensatz mit einem bestimmten Indexschlüsselwert in einer IDX-Datei oder einem CDX-Indexnamen enthalten ist. UNIQUE kann zur Verhinderung des Anzeigens doppelt vorhandener Datensätze oder des Zugriffs auf diese verwendet werden. Alle Datensätze, die mit doppelt vorhandenen Indexschlüsseln hinzugefügt werden, sind aus der Indexdatei ausgeschlossen. Die Verwendung der Option UNIQUE von INDEX ist identisch mit der Ausführung von SET UNIQUE ON vor der Eingabe von INDEX oder REINDEX.Ist ein UNIQUE-Index oder Indexname aktiv und ein doppelt vorhandener Datensatz wird derart geändert, dass sich auch sein Indexschlüssel ändert, wird der Index oder Indexname aktualisiert. Jedoch kann der nächste doppelt vorhandene Datensatz mit dem ursprünglichen Indexschlüssel nicht angezeigt oder angesprochen werden, bevor die Datei nicht mit REINDEX neu indiziert wurde.
CANDIDATE
Erzeugt einen potenziellen strukturierten Indexnamen. Das Schlüsselwort CANDIDATE kann nur einbezogen werden, wenn ein strukturierter Indexname erzeugt wird. Sonst erzeugt Visual FoxPro eine Fehlermeldung.Ein potenzieller Indexname verhindert doppelt vorhandene Werte im Feld oder einer Kombination von Feldern, die im Indexausdruck eExpression angegeben werden. Der Begriff candidate bezieht sich auf den Indextyp. Da potenzielle Indizes doppelte Werte verhindern, sind sie als Kandidaten für einen Primärindex geeignet.
Visual FoxPro erzeugt einen Fehler, wenn Sie einen potenziellen Indexnamen für ein Feld oder Felder erzeugen, die bereits doppelt vorhandene Werte enthalten.
Weitere Informationen zu potenziellen und primären Indexnamen finden Sie unter Festlegen eines primären oder potenziellen Indexes.
ADDITIVE
Hält vorher geöffnete Indexdateien offen. Wenn Sie bei der Erzeugung einer Indexdatei oder von Dateien für eine Tabelle mit INDEX die ADDITIVE-Klausel weglassen, werden alle vorher geöffneten Indexdateien (außer den strukturierten Mehrfachindexdateien) geschlossen.
Hinweise
Datensätze in einer Tabelle, die eine Indexdatei besitzt, werden in der durch den Indexausdruck spezifizierten Reihenfolge angezeigt und angesprochen. Die physikalische Anordnung der Datensätze in der Tabelle wird von einer Indexdatei nicht geändert.
Steht SET TALK auf ON, gibt Visual FoxPro an, wie viele Datensätze während des Indizierungsvorgangs indiziert werden. Das während der Indizierung angezeigte Datensatzintervall kann mit Hilfe von SET ODOMETER eingestellt werden.
Verwenden Sie zum Anzeigen weiterer Informationen über offene Indexdateien DISPLAY STATUS. Diese Information beinhaltet die Namen aller offenen Indexdateien, ihren Typ (strukturiert, CDX, IDX), ihre Indexausdrücke, Sortierreihenfolge und den Namen der Hauptindexdatei oder des Hauptindexnamens.
Die Anzahl der Indexdateien (IDX oder CDX), die Sie öffnen können, wird nur durch Speicherplatz und Systemressourcen beschränkt. In Visual FoxPro, FoxPro für Windows und FoxPro für MS-DOS wird die Gesamtanzahl der Dateien, die gleichzeitig geöffnet werden können, durch die FILES-Einstellung in der MS-DOS-Konfigurationsdatei Config.sys festgelegt. Weitere Informationen über den Befehl FILES finden Sie in Ihrem MS-DOS-Handbuch.
Indextypen Mit Visual FoxPro können Sie zwei Typen von Indexdateien erstellen:
- Mehrfachindexdateien (CDX), die mehrfache Indexeinträge, sogenannte Tags, enthalten.
- IDX-Indexdateien, die einen Indexeintrag enthalten.
Sie können auch eine strukturierte Mehrfachindexdatei erzeugen, die automatisch zusammen mit der Tabelle geöffnet wird.
Tipp Da strukturierte Mehrfachindexdateien automatisch mit der Tabelle geöffnet werden, sind sie der bevorzugte Indextyp.
Beziehen Sie zur Erzeugung komprimierter IDX-Indexdateien COMPACT ein. Mehrfachindexdateien sind immer komprimiert.
Indexsortierung und -aktualisierung Nur eine Indexdatei (die Hauptindexdatei) oder ein Indexname (der Hauptindexname) bestimmt die Reihenfolge, in der die Tabelle dargestellt oder angesprochen wird. Bestimmte Befehle (z. B. SEEK) verwenden die Hauptindexdatei oder den Hauptindexnamen, um nach Datensätzen zu suchen. Es werden jedoch nach dem Verändern der Tabelle alle offenen IDX- und CDX-Indexdateien aktualisiert. Sie können die Hauptindexdatei oder den Hauptindexnamen mit der INDEX-Klausel der USE-Anweisung oder mit SET INDEX und SET ORDER bestimmen.
Anmerkung Durch das Ersetzen eines Schlüsselfeldes wird die relative Position des Indexes für den aktuellen Datensatz geändert. Deshalb sollten Sie vorsichtig sein, wenn Sie beim Ändern des Indexes für einen Bereich Operationen wie REPLACE ALL oder SCAN … ENDSCAN ausführen. Dies gilt auch für REPLACE-Operationen an Indizes, die mit einer FOR-Klausel erstellt wurden.
Benutzerdefinierte Funktionen Obwohl ein Indexausdruck benutzerdefinierte Funktionen enthalten kann, sollten Sie diese nicht in einem Indexausdruck verwenden. Benutzerdefinierte Funktionen in einem Indexausdruck verlängern die Zeit, die zur Erzeugung oder Aktualisierung des Indexes benötigt wird. Auch kann es passieren, dass beim Verwenden von benutzerdefinierten Funktionen in Indexausdrücken Indizes nicht aktualisiert werden.
Wenn Sie eine benutzerdefinierte Funktion in einem Indexausdruck verwenden, muss Visual FoxPro in der Lage sein, diese Funktion zu finden. Erzeugt Visual FoxPro einen Index, wird der Indexausdruck zwar in der Indexdatei gespeichert, aber es wird nur ein Verweis auf die benutzerdefinierte Funktion in den Indexausdruck eingefügt.
Beispiel
In Beispiel 1 wird die Customer
-Tabelle geöffnet und eine Indextabelle mit dem Namen complist
erzeugt, die Datensätze alphabetisch in der Reihenfolge des Feldes company
anzeigt und verarbeitet.
In Beispiel 2 wird die Customer
-Tabelle wieder geöffnet und eine Indexdatei mit dem Namen citycomp
aus einer Unterzeichenfolge erzeugt, die aus den ersten fünf Zeichen des city
- und den ersten sechs Zeichen des company
-Feldes gebildet wird. Wird diese Indexdatei verwendet, werden Datensätze in der Tabelle vorrangig nach dem city
- und dann nach dem company
-Feld geordnet.
In Beispiel 3 werden Indexnamen erzeugt. Der erste Indexname ist ein strukturierter Mehrfachindexname für address.
Der zweite Name wird in einer nicht-strukturierten Indexdatei namens custcdx
erzeugt.
* Example 1
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE Customer && Open customer table
INDEX ON company TO complist
CLEAR
DISPLAY STATUS
* Example 2
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE Customer && Open customer table
INDEX ON SUBSTR(city,1,5) + SUBSTR(company,1,6) TO citycomp
CLEAR
DISPLAY STATUS
* Example 3
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE Customer && Open customer table
INDEX ON address TAG address
INDEX ON company TAG company OF custcdx
CLEAR
DISPLAY STATUS
Siehe auch
ALTER TABLE | CDX( ) | COPY INDEXES | COPY TAG | DELETE TAG | FOR( ) | INDEXSEEK( ) | KEY( ) | MDX( ) | NDX( ) | ORDER( ) | REINDEX | SET COLLATE | SET INDEX | SET ODOMETER | SET ORDER | SET TALK | SET UNIQUE | SORT | SYS(14) | SYS(21) | SYS(22) | SYS(2021) | TAG( ) | TAGCOUNT( ) | USE