JET_INDEXCREATE2-Struktur
Gilt für: Windows | Windows Server
Die JET_INDEXCREATE2-Struktur enthält die Informationen, die erforderlich sind, um einen Index für Daten in einer ESE-Datenbank (Extensible Storage Engine) zu erstellen. Die -Struktur wird von Funktionen wie JetCreateIndex2und in Strukturen wie JET_TABLECREATE und JET_TABLECREATE2.
Die JET_INDEXCREATE2-Struktur wurde im Windows 7-Betriebssystem eingeführt.
typedef struct tagJET_INDEXCREATE2 {
unsigned long cbStruct;
tchar* szIndexName;
tchar* szKey;
unsigned long cbKey;
JET_GRBIT grbit;
unsigned long ulDensity;
union {
unsigned long lcid;
JET_UNICODEINDEX* pidxunicode;
};
union {
unsigned long cbVarSegMac;
JET_TUPLELIMITS* ptuplelimits;
};
JET_CONDITIONALCOLUMN* rgconditionalcolumn;
unsigned long cConditionalColumn;
JET_ERR err;
unsigned long cbKeyMost;
JET_SPACEHINTS* pSpacehints;
} JET_INDEXCREATE;
Member
cbStruct
Die Größe (in Bytes) dieser Struktur. Legen Sie diesen Member auf sizeof( JET_INDEXCREATE2 ) fest.
szIndexName
Der Name des zu erstellenden Indexes.
Der Name sollte die folgenden Bedingungen erfüllen:
Er sollte kleiner als JET_cbNameMost sein, ohne den beendenden NULL-Wert.
Sie muss aus den folgenden Zeichen bestehen: 0 (null) bis 9, A bis Z, a bis z und alle anderen Interpunktionen außer " ! " (Ausrufezeichen), "," (Komma), " " (öffnende Klammer) und " " ( schließende Klammer) – d. h. ASCII-Zeichen 0x20, 0x22 bis 0x2d, 0x2f bis 0x5a, 0x5c und [ ] 0x5d bis 0x7f.
Er darf nicht mit einem Leerzeichen beginnen.
Sie muss mindestens ein Zeichen enthalten, das kein Leerzeichen ist.
szKey
Ein Zeiger auf eine double-null-terminierte Zeichenfolge von Token mit NULL-Trennzeichen.
Jedes Token hat das Formular " <direction-specifier> <column-name> ", wobei direction-specification entweder "+" oder "-" ist. Beispielsweise indiziert ein szKey von "+abc \ 0-def 0+ %. 0" über die drei Spalten "abc" (in aufsteigender Reihenfolge), "def" (in absteigender Reihenfolge) und \ \ "uff" (in aufsteigender Reihenfolge). In der Programmiersprache C verfügen Zeichenfolgenliterale über ein implizites NULL-Abschlusszeichen, sodass die obige Zeichenfolge durch einen double-NULL-Wert beendet wird.
Die Anzahl der in szKey angegebenen Spalten darf JET_ccolKeyMost (eine versionsabhängige Konstante) nicht überschreiten.
Mindestens eine Spalte muss in szKey benannt werden.
Veraltetes Verhalten: Nach dem Double-NULL-Abschlusszeichen ist es möglich, eine Sprach-ID (ein WORD, das an MAKELCID( langid, SORT_DEFAULT ) übergeben wird) als Möglichkeit anzugeben, um die LCID für den Index anzugeben. Es ist unzulässig, sowohl eine Sprach-ID in szKey als auch eine LCID in JET_UNICODEINDEX anzugeben (durch Festlegen JET_bitIndexUnicode in grbit).
Veraltet: Nach der Sprach-ID ist es möglich, cbVarSegMac als USHORT-Datentyp zu übergeben. Das Verhalten ist nicht definiert, wenn USHORT sowohl in szKey als auch in der Struktur cbVarSegMac festgelegt ist.
cbKey
Die Länge von szKey in Bytes, einschließlich der beiden endenden NULL-Werte.
grbit
Eine Gruppe von Bits, die null oder mehr der in der folgenden Tabelle aufgeführten Wertoptionen enthalten.
Wert |
Bedeutung |
|---|---|
JET_bitIndexUnique |
Doppelte Indexeinträge (Schlüssel) sind nicht verfügbar. Dies wird erzwungen, wenn JetUpdate aufgerufen wird, nicht, wenn JetSetColumn aufgerufen wird. |
JET_bitIndexPrimary |
Der Index ist ein primärer (gruppierter) Index. Jede Tabelle muss genau einen primären Index haben. Wenn kein primärer Index explizit für eine Tabelle definiert ist, erstellt die Datenbank-Engine einen eigenen primären Index. |
JET_bitIndexDisallowNull |
Keine der Spalten, für die der Index erstellt wird, darf einen NULL-Wert enthalten. |
JET_bitIndexIgnoreNull |
Fügen Sie keinen Indexeintrag für eine Zeile hinzu, wenn alle indizierten Spalten NULL sind. |
JET_bitIndexIgnoreAnyNull |
Fügen Sie keinen Indexeintrag für eine Zeile hinzu, wenn eine der indizierten Spalten NULL ist. |
JET_bitIndexIgnoreFirstNull |
Fügen Sie keinen Indexeintrag für eine Zeile hinzu, wenn die erste spalte, die indiziert wird, NULL ist. |
JET_bitIndexLazyFlush |
Gibt an, dass die Indexvorgänge lazidiert protokolliert werden. JET_bitIndexLazyFlush wirkt sich nicht auf die Trägheit von Datenaktualisierungen aus. Wenn der Indizierungsvorgang durch die Prozessbeendigung unterbrochen wird, kann die Soft Recovery die Datenbank weiterhin in einen konsistenten Zustand stellen, aber der Index ist möglicherweise nicht vorhanden. |
JET_bitIndexEmpty |
Versuchen Sie nicht, den Index zu erstellen, da alle Einträge als NULL ausgewertet würden. grbit MUSS auch die JET_bitIgnoreAnyNull angeben, JET_bitIndexEmpty übergeben wird. Dies ist eine Leistungsverbesserung. Wenn beispielsweise einer Tabelle eine neue Spalte hinzugefügt wird und dann ein Index für diese neu hinzugefügte Spalte erstellt wird, werden alle Datensätze in der Tabelle überprüft, obwohl sie dem Index nicht hinzugefügt werden. Wenn sie JET_bitIndexEmpty, wird die Überprüfung der Tabelle übersprungen, was möglicherweise sehr lange dauern kann. |
JET_bitIndexUnversioned |
JET_bitIndexUnversioned wird die Indexerstellung für andere Transaktionen sichtbar. Normalerweise kann eine Sitzung in einer Transaktion keinen Indexerstellungsvorgang in einer anderen Sitzung sehen. Dieses Flag kann nützlich sein, wenn eine andere Transaktion wahrscheinlich denselben Index erstellt. Bei der zweiten Indexerstelle wird einfach ein Fehler verursacht, anstatt potenziell viele unnötige Datenbankvorgänge zu verursachen. Die zweite Transaktion kann den Index möglicherweise nicht sofort verwenden. Der Indexerstellungsvorgang muss abgeschlossen werden, bevor er verwendet werden kann. Die Sitzung darf sich derzeit nicht in einer Transaktion befindet, um einen Index ohne Versionsinformationen zu erstellen. |
JET_bitIndexSortNullsHigh |
Wenn Sie dieses Flag angeben, werden NULL-Werte nach Daten für alle Spalten im Index sortiert. |
JET_bitIndexUnicode |
Die Angabe dieses Flags wirkt sich auf die Interpretation des Felds lcid/pidxunicde union in der Struktur aus. Das Festlegen des Bits bedeutet, dass das Feld pidxunicode tatsächlich auf eine JET_UNICODEINDEX verweist. JET_bitIndexUnicode ist nicht erforderlich, um Unicode-Daten zu indizieren. Sie ist nur erforderlich, um die Normalisierung von Unicode-Daten anzupassen. |
JET_bitIndexTuples |
Gibt an, dass der Index ein Tupelindex ist. Unter JET_TUPLELIMITS finden Sie eine Beschreibung eines Tupelindexes. Der JET_bitIndexTuples wert wurde in das xp Windows Xp-Betriebssystem eingeführt. |
JET_bitIndexTupleLimits |
Die Angabe dieses Flags wirkt sich auf die Interpretation des union-Felds cbVarSegMac/ptuplelimits in der -Struktur aus. Das Festlegen dieses Bits bedeutet, dass das Ptuplelimits-Feld tatsächlich auf eine JET_TUPLELIMITS-Struktur verweist, um benutzerdefinierte Tupelindexgrenzwerte zu ermöglichen (impliziert JET_bitIndexTuples). Der JET_bitIndexTupleLimits wurde im Betriebssystem Windows Server 2003 eingeführt. |
JET_bitIndexCrossProduct |
Wenn Sie dieses Flag für einen Index angeben, der über mehrere Schlüsselspalten verfügt, bei denen es sich um eine mehrwertige Spalte handelt, wird für jedes Ergebnis eines Kreuzprodukts aller Werte in diesen Schlüsselspalten ein Indexeintrag erstellt. Andernfalls würde der Index nur einen Eintrag für jeden Mehrwert in der wichtigsten Schlüsselspalte enthalten, bei der es sich um eine mehrwertige Spalte handelt, und jeder dieser Indexeinträge würde den ersten Mehrwert aus allen anderen Schlüsselspalten verwenden, bei denen es sich um mehrwertige Spalten handelt. Wenn Sie beispielsweise dieses Flag für einen Index über Spalte A mit den Werten "red" und "blue" und über Spalte B mit den Werten "1" und "2" angegeben haben, werden die folgenden Indexeinträge erstellt: "red", "1"; "red", "2"; "blue", "1"; "blue", "2". Andernfalls werden die folgenden Indexeinträge erstellt: "red", "1"; "blue", "1". Der JET_bitIndexCrossProduct-Wert wurde in Windows Vista eingeführt. |
JET_bitIndexKeyMost |
Wenn Sie dieses Flag angeben, verwendet der Index die maximale Schlüsselgröße, die im feld cbKeyMost in der Struktur angegeben ist. Andernfalls verwendet der Index JET_cbKeyMost (255) als maximale Schlüsselgröße. Der JET_bitIndexKeyMost-Wert wurde in Windows Vista eingeführt. |
JET_bitIndexDisallowTruncation |
Die Angabe dieses Flags führt dazu, dass alle Aktualisierungen des Indexes, die dazu führen würden, dass ein abgeschnittener Schlüssel mit dem JET_errKeyTruncated fehlschlägt. Andernfalls werden Schlüssel automatisch abgeschnitten. Weitere Informationen zum Abschneiden von Schlüsseln finden Sie unter JetMakeKey. Der JET_bitIndexDisallowTruncation Wert wurde in Windows Vista eingeführt. |
ulDensity
Die prozentuale Dichte der anfänglichen Indexstruktur B+. Wenn Sie eine Zahl kleiner als 100 angeben, wird mehr Speicherplatz benötigt, um den Index anfänglich zu erstellen. Dies ermöglicht jedoch das zukünftige Wachstum des Indexes, wodurch eine interne Fragmentierung vermieden wird.
lcid
Der Gebietsschemabezeichner (LCID), der beim Normalisieren der Daten verwendet werden soll, wenn der JET_bitIndexUnicode Wert nicht im grbit-Parameter angegeben ist. Die LCID wirkt sich auf die Normalisierung aus, wenn sich der Index über Unicode-Spalten befindet.
pidxunicode
Ein Zeiger auf eine JET_UNICODEINDEX-Struktur, wenn der JET_bitIndexUnicode Wert im grbit-Parameter angegeben ist. Dadurch kann der Benutzer benutzerdefinierte Flags angeben, die während der Unicode-Normalisierung an die LCMapString-Funktion übergeben werden.
cbVarSegMac
Die maximale Länge (in Bytes) jeder Spalte, die im Index gespeichert werden soll, wenn der JET_bitIndexTupleLimits Wert nicht im grbit-Parameter angegeben ist.
Das Angeben des Werts 0 (null) für dieses Feld entspricht folgendem Wert:
Angeben JET_cbPrimaryKeyMost für einen primären Index.
Angeben JET_cbSecondaryKeyMost für einen sekundären Index.
ptuplelimits
Ein Zeiger auf eine JET_TUPLELIMITS-Struktur, wenn der JET_bitIndexTupleLimits Wert im grbit-Parameter angegeben ist.
ptuplelimits wurde in Windows Server 2003 eingeführt.
rgconditionalcolumn
Ein optionaler Parameter für ein Array von JET_CONDITIONALCOLUMN Strukturen, die zum Angeben der bedingten Spalten im Index verwendet werden.
cConditionalColumn
Die Anzahl der Strukturen im Array rgconditionalcolumn.
Err
Enthält den Rückgabecode zum Erstellen dieses Indexes.
cbKeyMost
Gibt die maximal zulässige Größe für Schlüssel im Index in Bytes an. Dieser Parameter wird ignoriert, wenn JET_bitIndexKeyMost nicht im grbit-Parameter angegeben ist. Wenn dieser Parameter auf 0 (null) festgelegt ist und JET_bitIndexKeyMost im grbit-Member angegeben ist, schlägt die aufrufende Funktion mit JET_err_InvalidDef fehl.
Die maximal unterstützte Mindestschlüsselgröße ist JET_cbKeyMostMin (255), was der maximalen Legacyschlüsselgröße entspricht.
Die maximale Schlüsselgröße hängt wie folgt von der Größe der Datenbankseite (JET_paramDatabasePageSize) ab:
Wenn JET_paramDatabasePageSize = 2048 ist, JET_cbKeyMostMin (255) < = cbKeyMost < = JET_cbKeyMost2KBytePage (500)
Wenn JET_paramDatabasePageSize = 4096 ist, JET_cbKeyMostMin (255) < = cbKeyMost < = JET_cbKeyMost4KBytePage (1000)
Wenn JET_paramDatabasePageSize = 8192, JET_cbKeyMostMin (255) < = cbKeyMost < = JET_cbKeyMost8KBytePage (2000)
Die maximal unterstützte maximale Schlüsselgröße für die Instanz kann auch aus dem JET_paramKeyMost Systemparameter gelesen werden.
cbKeyMost wurde in Windows Vista eingeführt.
pSpacehints
Ein Zeiger auf eine JET_SPACEHINTS-Struktur.
pSpacehints wurde in Windows 7 eingeführt.
Hinweise
ESE unterstützt die Indizierung über Schlüsselspalten, die mehrere Werte enthalten. Um dieses Feature verwenden zu können, muss die Spalte ein markierter Spaltentyp (JET_bitColumnTagged) sein, und sie muss gekennzeichnet werden, damit ihre mehreren Werte mit JET_bitColumnMultiValued indiziert werden. In Versionen von Windows vor Windows Vista werden nur für die erste mehrwertige Schlüsselspalte im Index die Werte im Index erweitert. Für alle anderen mehrwertigen und markierten Spalten werden nur die ersten Werte im Index erweitert.
Angenommen, die folgenden Zeilen sind in einer Tabelle vorhanden (Spalte Alpha ist nicht mehrwertig, während die Spalten Beta, Gamma und Delta mehrwertig sind), und ein Index wird als "+Alpha \ 0+Beta \ 0+Gamma \ 0+Delta \ 0 \ 0" erstellt:
Alpha |
Beta |
Gamma |
Delta |
|---|---|---|---|
1 |
ABC |
MNO |
VWX |
2 |
DAS |
REGEN |
IN |
Die folgenden Indextupel werden gespeichert:
{1,ABC,MNO,VWX}
{1, WHI,MNO,VWX}
{1,JKL,MNO,VWX}
{2,THE,RAIN,IN}
Beachten Sie, dass {2,THE,SPANIEN,IN} nicht gespeichert ist, obwohl die Alphaspalte in der zweiten Zeile einen einzelnen mehrwertigen Wert aufzuweisen hat.
In Versionen von Windows, die mit Windows Vista beginnen, können alle mehrwertigen Spalten im Index durch Angabe von JET_bitIndexCrossProduct erweitert werden.
Anforderungen
| | |
Client
|Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.
| |Server
|Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server.
| |Header
|Deklariert in Esent.h.
| |Unicode
|Implementiert als JET_ INDEXCREATE2_W (Unicode) und JET_ INDEXCREATE2_A (ANSI).
|Weitere Informationen
JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate