JET_INDEXCREATE-Struktur

Gilt für: Windows | Windows Server

Die JET_INDEXCREATE-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.

typedef struct tagJET_INDEXCREATE {
  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_INDEXCREATE;

Member

cbStruct

Die Größe (in Bytes) dieser Struktur. Legen Sie diesen Member auf sizeof( JET_INDEXCREATE ) fest.

szIndexName

Der Name des zu erstellenden Indexes.

Der Name des Indexes muss die folgenden Bedingungen erfüllen:

  • Es muss kleiner als JET_cbNameMost sein, ohne dass der beendete NULL-Wert enthalten ist.

  • Sie muss aus den folgenden Zeichen bestehen: 0 (null) bis 9, A bis Z, a bis z und alle anderen Interpunktionszeichen mit Ausnahme von "!" (Ausrufezeichen), "," (Komma), "[" (öffnende Klammer) und "]" (schließende Klammer) – also ASCII-Zeichen 0x20, 0x22 bis 0x2d, 0x2f bis 0x5a, 0x5c, 0x5d bis 0x7f.

  • Sie darf nicht mit einem Leerzeichen beginnen.

  • Sie muss aus mindestens einem Nicht-Leerzeichen bestehen.

szKey

Ein Zeiger auf eine double-null-terminated-Zeichenfolge von DURCH NULL getrennten Token.

Jedes Token hat die Form "<Direction-Specifier><column-name>", wobei die Direction-Specification 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 ; Daher wird die obige Zeichenfolge durch einen double-NULL-Wert beendet.

Die in szKey angegebene Anzahl von Spalten darf den Wert von JET_ccolKeyMost (eine versionsabhängige Konstante) nicht überschreiten.

Mindestens eine Spalte muss in szKey benannt werden.

Veraltetes Verhalten: Nach dem Doppel-NULL-Abschlusszeichen ist es möglich, eine Sprach-ID anzugeben (ein WORD, das an MAKELCID( langid, SORT_DEFAULT ) übergeben wird, 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 zu übergeben. Das Verhalten ist nicht definiert, wenn 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 null oder mehr der in der folgenden Tabelle aufgeführten Werte enthält.

Wert

Bedeutung

JET_bitIndexUnique

Doppelte Indexeinträge (Schlüssel) sind nicht zulässig. Dies wird erzwungen, wenn JetUpdate aufgerufen wird, nicht beim Aufrufen 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, kann 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 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

Indexvorgänge werden verzögert protokolliert.

JET_bitIndexLazyFlush wirkt sich nicht auf die Verzögertheit von Datenaktualisierungen aus. Wenn der Indizierungsvorgang durch die Prozessbeendigung unterbrochen wird, kann Soft Recovery die Datenbank weiterhin in einen konsistenten Zustand bringen, 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 JET_bitIgnoreAnyNull angeben, wenn JET_bitIndexEmpty übergeben wird. Dies ist eine Leistungssteigerung. Wenn z. B. einer Tabelle eine neue Spalte hinzugefügt wird, wird ein Index für diese neu hinzugefügte Spalte erstellt, und alle Datensätze in der Tabelle werden überprüft, obwohl sie nicht dem Index hinzugefügt werden. Die Angabe JET_bitIndexEmpty überspringt das Scannen der Tabelle, was möglicherweise lange dauern kann.

JET_bitIndexUnversioned

Bewirkt, dass die Indexerstellung für andere Transaktionen sichtbar ist. In der Regel 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. Die zweite Indexerstellung schlägt 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 lcid/pidxunicde-Unionfelds 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 wird nur verwendet, um die Normalisierung von Unicode-Daten anzupassen.

JET_bitIndexTuples

Gibt an, dass der Index ein Tupelindex ist. Eine Beschreibung eines Tupelindexes finden Sie unter JET_TUPLELIMITS .

JET_bitIndexTuples wurde im Windows XP-Betriebssystem eingeführt.

JET_bitIndexTupleLimits

Die Angabe dieses Flags wirkt sich auf die Interpretation des cbVarSegMac/ptuplelimits-Unionfelds in der -Struktur aus. Das Festlegen dieses Bits bedeutet, dass das Ptuplelimits-Feld tatsächlich auf eine JET_TUPLELIMITS-Struktur zeigt, um benutzerdefinierte Tupelindexgrenzwerte zuzulassen (impliziert JET_bitIndexTuples).

JET_bitIndexTupleLimits wurde im Betriebssystem Windows Server 2003 eingeführt.

JET_bitIndexCrossProduct 0x00004000

Wenn Sie dieses Flag für einen Index angeben, der mehr als eine Schlüsselspalte enthält, 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 hätte der Index nur einen Eintrag für jeden Mehrwertwert in der wichtigsten Schlüsselspalte, 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, 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, werden 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".

JET_bitIndexCrossProduct wurde im Windows Vista-Betriebssystem eingeführt.

JET_bitIndexKeyMost 0x00008000

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.

JET_bitIndexKeyMost wurde in Windows Vista eingeführt.

JET_bitIndexDisallowTruncation 0x00010000

Die Angabe dieses Flags führt zu einer Aktualisierung des Indexes, die dazu führen würde, dass ein abgeschnittener Schlüssel mit JET_errKeyTruncated fehlschlägt. Andernfalls werden Schlüssel automatisch abgeschnitten. Weitere Informationen zum Abschneiden von Schlüsseln finden Sie in der JetMakeKey-Funktion .

Windows Vista: JET_bitIndexDisallowTruncation wird in Windows Vista eingeführt.

JET_bitIndexNestedTable 0x00020000

Wenn Sie dieses Flag angeben, wird der Index über mehrere mehrwertige Spalten aktualisiert, jedoch nur mit Werten desselben itagSequence.

JET_bitIndexNestedTable 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 eines Werts von 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 der JET_bitIndexKeyMost-Wert nicht im grbit-Parameter angegeben ist. Wenn dieser Parameter auf null festgelegt ist und JET_bitIndexKeyMost im grbit-Parameter 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 Schlüsselgröße für die instance kann auch aus dem JET_paramKeyMost Systemparameter gelesen werden.

cbKeyMost wurde in Windows Vista 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 fallenden 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_ INDEXCREATE_W (Unicode) und JET_ INDEXCREATE_A (ANSI).

Siehe auch

JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate