JET_INDEXCREATE2-Struktur
Gilt für: Windows | Windows Server
Die JET_INDEXCREATE2-Struktur enthält die Informationen, die zum Erstellen eines Indexes für Daten in einer ESE-Datenbank (Extensible Storage Engine) erforderlich sind. Die Struktur wird von Funktionen wie JetCreateIndex2 und in Strukturen wie JET_TABLECREATE und JET_TABLECREATE2 verwendet.
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 dieses Element auf sizeof( JET_INDEXCREATE2 ) fest.
szIndexName
Der Name des zu erstellenden Indexes.
Der Name sollte die folgenden Bedingungen erfüllen:
Es sollte kleiner als JET_cbNameMost sein, ohne dass der beendende NULL-Wert enthalten ist.
Es muss aus dem folgenden Zeichensatz bestehen: 0 (null) bis 9, A bis Z, a bis z und alle anderen Interpunktion mit Ausnahme von "!" (Ausrufezeichen), "," (Komma), "[" (öffnende Klammer) und "]" (schließende Klammer) – also ASCII-Zeichen 0x20, 0x22 über 0x2d, 0x2f über 0x5a, 0x5c und 0x5d über 0x7f.
Es darf nicht mit einem Leerzeichen beginnen.
Es muss mindestens ein Zeichen ohne Leerzeichen enthalten.
szKey
Ein Zeiger auf eine double-NULL-beendete Zeichenfolge mit null getrennten Token.
Jedes Token hat das Format "<direction-specifier><column-name>", wobei die Richtungsspezifikation entweder "+" oder "-" ist. Beispielsweise wird ein szKey von "+abc\0-def\0+ghi\0" über die drei Spalten "abc" (in aufsteigender Reihenfolge), "def" (in absteigender Reihenfolge) und "ghi" (in aufsteigender Reihenfolge) indiziert. In der Sprache C verfügen Zeichenfolgenliterale über einen implizierten NULL-Abschluss , sodass die obige Zeichenfolge durch ein Double-NULL beendet wird.
Die in szKey angegebene Anzahl von Spalten darf JET_ccolKeyMost (eine versionsabhängige Konstante) nicht überschreiten.
Mindestens eine Spalte muss in szKey benannt sein.
Veraltetes Verhalten: Nach dem Doppel-NULL-Abschluss ist es möglich, eine Sprach-ID (ein WORD, das an MAKELCID( langid, SORT_DEFAULT ) übergeben wird, 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 von 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 die USHORT sowohl in szKey als auch cbVarSegMac in der Struktur festgelegt ist.
cbKey
Die Länge von szKey in Bytes, einschließlich der beiden beendenden NULL-Werte.
grbit
Eine Gruppe von Bits, die mindestens null der Wertoptionen enthalten, die in der folgenden Tabelle aufgeführt sind.
Wert |
Bedeutung |
---|---|
JET_bitIndexUnique |
Doppelte Indexeinträge (Schlüssel) sind nicht zulässig. Dies wird erzwungen, wenn JetUpdate aufgerufen wird, nicht beim Aufruf von JetSetColumn . |
JET_bitIndexPrimary |
Der Index ist ein primärer (gruppierter) Index. Jede Tabelle muss genau einen primären Index aufweisen. 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, über die der Index erstellt wird, darf einen NULL-Wert enthalten. |
JET_bitIndexIgnoreNull |
Fügen Sie keinen Indexeintrag für eine Zeile hinzu, wenn alle Spalten, die indiziert werden, NULL sind. |
JET_bitIndexIgnoreAnyNull |
Fügen Sie keinen Indexeintrag für eine Zeile hinzu, wenn eine der zu 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 lazily protokolliert werden. JET_bitIndexLazyFlush wirkt sich nicht auf die Faulheit von Datenaktualisierungen aus. Wenn der Indizierungsvorgang durch die Prozessbeendigung unterbrochen wird, kann Soft Recovery die Datenbank weiterhin in einen konsistenten Zustand versetzen, aber der Index ist möglicherweise nicht vorhanden. |
JET_bitIndexEmpty |
Versuchen Sie nicht, den Index zu erstellen, da alle Einträge auf NULL ausgewertet würden. grbit MUSS auch JET_bitIgnoreAnyNull angeben, wann JET_bitIndexEmpty übergeben wird. Dies ist eine Leistungssteigerung. Wenn einer Tabelle beispielsweise eine neue Spalte hinzugefügt wird und dann ein Index über 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 angeben, wird die Überprüfung der Tabelle übersprungen, was möglicherweise lange dauern kann. |
JET_bitIndexUnversioned |
JET_bitIndexUnversioned bewirkt, dass die Indexerstellung für andere Transaktionen sichtbar ist. Normalerweise kann für eine Sitzung in einer Transaktion kein Indexerstellungsvorgang in einer anderen Sitzung angezeigt werden. Dieses Flag kann nützlich sein, wenn eine andere Transaktion wahrscheinlich denselben Index erstellt. Die zweite Indexerstellung schlägt einfach fehl, anstatt möglicherweise 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 befinden, 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 Unionsfelds lcid/pidxunicde in der Struktur aus. Das Festlegen des Bits bedeutet, dass das Pidxunicode-Feld tatsächlich auf eine JET_UNICODEINDEX-Struktur 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 es sich bei dem Index um einen Tupelindex handelt. Eine Beschreibung eines Tupelindexes finden Sie unter JET_TUPLELIMITS . Der JET_bitIndexTuples-Wert wurde im Windows XP-Betriebssystem eingeführt. |
JET_bitIndexTupleLimits |
Die Angabe dieses Flags wirkt sich auf die Interpretation des Unionsfelds 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 zuzulassen (impliziert JET_bitIndexTuples). Der JET_bitIndexTupleLimits-Wert wurde im Windows Server 2003-Betriebssystem eingeführt. |
JET_bitIndexCrossProduct |
Wenn Sie dieses Flag für einen Index angeben, der über mehr als eine Schlüsselspalte verfügt, bei der es sich um eine mehrwertige Spalte handelt, wird für jedes Ergebnis eines Kreuzprodukts aller Werte in diesen Schlüsselspalten ein Indexeintrag erstellt. Andernfalls verfügt der Index nur über einen Eintrag für jeden Mehrwert in der wichtigsten Schlüsselspalte, die eine mehrwertige Spalte ist, und jeder dieser Indexeinträge würde den ersten Mehrwert aus allen anderen Schlüsselspalten verwenden, die mehrwertige Spalten sind. Wenn Sie beispielsweise dieses Flag für einen Index über Spalte A mit den Werten "rot" und "blau" und über Spalte B mit den Werten "1" und "2" angegeben haben, würden die folgenden Indexeinträge erstellt: "rot", "1"; "rot", "2"; "blau", "1"; "blau", "2". Andernfalls würden die folgenden Indexeinträge erstellt: "red", "1"; "blau", "1". Der JET_bitIndexCrossProduct-Wert wurde in Windows Vista eingeführt. |
JET_bitIndexKeyMost |
Die Angabe dieses Flags führt dazu, dass der Index die maximale Schlüsselgröße verwendet, 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 eine Aktualisierung des Indexes, die dazu führt, dass ein abgeschnittener Schlüssel mit dem JET_errKeyTruncated Antwortcode fehlschlägt. Andernfalls werden Schlüssel unbeaufsichtigt 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 zunächst mehr Platz zum Erstellen des Indexes verbraucht, aber sie ermöglicht das zukünftige Wachstum des Indexes, sodass eine interne Fragmentierung vermieden wird.
lcid
Der Gebietsschemabezeichner (Locale Identifier, LCID), der beim Normalisieren der Daten verwendet werden soll, wenn der JET_bitIndexUnicode Wert im grbit-Parameter nicht 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 im grbit-Parameter nicht angegeben ist.
Das Angeben des Werts 0 (null) für dieses Feld entspricht folgendem:
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 (in Bytes) für Schlüssel im Index an. Dieser Parameter wird ignoriert, wenn JET_bitIndexKeyMost nicht im grbit-Parameter angegeben ist. Wenn dieser Parameter auf null festgelegt ist und JET_bitIndexKeyMost im grbit-Element angegeben ist, schlägt die aufrufende Funktion mit JET_err_InvalidDef fehl.
Die minimale unterstützte maximale Schlüsselgröße ist JET_cbKeyMostMin (255), was der maximalen Legacyschlüsselgröße entspricht.
Die maximale Schlüsselgröße hängt wie folgt von der Seitengröße der Datenbank (JET_paramDatabasePageSize) ab:
Wenn JET_paramDatabasePageSize = 2048, dann JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost2KBytePage (500)
Wenn JET_paramDatabasePageSize = 4096, dann JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost4KBytePage (1000)
Wenn JET_paramDatabasePageSize = 8192, dann JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost8KBytePage (2000)
Die maximal unterstützte maximale Schlüsselgröße für die instance 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.
Bemerkungen
ESE unterstützt die Indizierung für Schlüsselspalten, die mehrere Werte enthalten. Um dieses Feature verwenden zu können, muss es sich bei der Spalte um einen markierten Spaltentyp (JET_bitColumnTagged) handeln, und es muss gekennzeichnet sein, dass ihre mehrere Werte mit JET_bitColumnMultiValued indiziert werden. In Versionen von Windows vor Windows Vista werden die Werte nur für die erste mehrwertige Schlüsselspalte 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 (die 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,GHI,MNO,VWX}
{1,JKL,MNO,VWX}
{2,THE,RAIN,IN}
Beachten Sie, dass {2,THE,SPAIN,IN} nicht gespeichert wird, obwohl die Alpha-Spalte in der zweiten Zeile zufällig einen einzelnen Mehrwert aufweist.
In Versionen von Windows ab Windows Vista können alle mehrwertigen Spalten im Index erweitert werden, indem JET_bitIndexCrossProduct angegeben wird.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista, Windows XP oder Windows 2000 Professional. |
Server |
Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server. |
Kopfzeile |
Deklariert in Esent.h. |
Unicode |
Implementiert als JET_ INDEXCREATE2_W (Unicode) und JET_ INDEXCREATE2_A (ANSI). |
Siehe auch
JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate