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
0x00004000

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
0x00008000

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
0x00010000

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
GHI
JKL

MNO
AZ
STU

VWX
YZ

2

DAS

REGEN
SPANIEN

IN
FÄLLT

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