Struttura JET_INDEXCREATE2

Si applica a: Windows | Windows Server

La struttura JET_INDEXCREATE2 contiene le informazioni necessarie per creare un indice sui dati in un database ESE (Extensible Storage Engine). La struttura viene usata da funzioni come JetCreateIndex2 e in strutture come JET_TABLECREATE e JET_TABLECREATE2.

La struttura JET_INDEXCREATE2 è stata introdotta nel sistema operativo Windows 7.

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;

Membri

cbStruct

Dimensione, in byte, della struttura. Impostare questo membro su sizeof( JET_INDEXCREATE2 ).

szIndexName

Nome dell'indice da creare.

Il nome deve soddisfare le condizioni seguenti:

  • Deve essere minore di JET_cbNameMost, non incluso il valore null terminante.

  • Deve essere costituito dal set di caratteri seguente: da 0 (zero) a 9, da A a Z, da z a z e da tutte le altre punteggiatura ad eccezione di "!" (punto esclamativo), "," (virgola), "[" (parentesi quadre di apertura) e "]" (parentesi quadre di chiusura), ovvero caratteri ASCII 0x20, 0x22 attraverso 0x2d, 0x2f attraverso 0x5a, 0x5c e 0x5d attraverso 0x7f.

  • Non deve iniziare con uno spazio.

  • Deve contenere almeno un carattere non spazio.

szKey

Puntatore a una stringa con terminazione double-null di token delimitati da null.

Ogni token è del modulo "<direction-identificatorr><column-name>", dove direction-specification è "+" o "-". Ad esempio, una szKey di "+abc\0-def\0+ghi\0" indicizza le tre colonne "abc" (in ordine crescente), "def" (in ordine decrescente) e "ghi" (in ordine crescente). Nel linguaggio C i valori letterali stringa hanno un terminatore NULL implicito, quindi la stringa precedente verrà terminata da un valore DOUBLE-NULL.

Il numero di colonne specificate in szKey non deve superare JET_ccolKeyMost (costante dipendente dalla versione).

Almeno una colonna deve essere denominata in szKey.

Comportamento obsoleto: dopo il terminatore DOUBLE-NULL, è possibile specificare un ID lingua (word che viene passato in MAKELCID( langid, SORT_DEFAULT ) come modo per specificare l'LCID per l'indice. È illegale specificare sia un ID lingua in szKey che un LCID in JET_UNICODEINDEX (impostando JET_bitIndexUnicode in grbit).

Deprecato: dopo l'ID lingua, è possibile passare cbVarSegMac come tipo di dati USHORT . Il comportamento non è definito se USHORT è impostato sia in szKey che se cbVarSegMac è impostato nella struttura.

cbKey

Lunghezza, in byte, di szKey, tra cui i due null terminanti.

grbit

Gruppo di bit che contengono zero o più opzioni di valore elencate nella tabella seguente.

Valore

Significato

JET_bitIndexUnique

Le voci di indice duplicate (chiavi) non sono consentite. Questa operazione viene applicata quando Viene chiamato JetUpdate , non quando viene chiamato JetSetColumn .

JET_bitIndexPrimary

L'indice è un indice primario (cluster). Ogni tabella deve avere esattamente un indice primario. Se non viene definito in modo esplicito un indice primario su una tabella, il motore di database creerà un proprio indice primario.

JET_bitIndexDisallowNull

Nessuna delle colonne su cui viene creato l'indice può contenere un valore NULL .

JET_bitIndexIgnoreNull

Non aggiungere una voce di indice per una riga se tutte le colonne indicizzate sono NULL.

JET_bitIndexIgnoreAnyNull

Non aggiungere una voce di indice per una riga se una delle colonne indicizzate è NULL.

JET_bitIndexIgnoreFirstNull

Non aggiungere una voce di indice per una riga se la prima colonna indicizzata è NULL.

JET_bitIndexLazyFlush

Specifica che le operazioni di indice verranno registrate in modo più pigre.

JET_bitIndexLazyFlush non influisce sulla lazia degli aggiornamenti dei dati. Se l'operazione di indicizzazione viene interrotta dalla terminazione del processo, Soft Recovery sarà comunque in grado di ottenere il database in uno stato coerente, ma l'indice potrebbe non essere presente.

JET_bitIndexEmpty

Non provare a compilare l'indice, perché tutte le voci valutano NULL. grbit DEVE specificare anche JET_bitIgnoreAnyNull quando JET_bitIndexEmpty viene passato. Si tratta di un miglioramento delle prestazioni. Ad esempio, se una nuova colonna viene aggiunta a una tabella e quindi viene creato un indice su questa colonna appena aggiunta, tutti i record della tabella vengono analizzati anche se non vengono aggiunti all'indice. Specificando JET_bitIndexEmpty ignora l'analisi della tabella, che potrebbe richiedere molto tempo.

JET_bitIndexUnversioned

JET_bitIndexUnversioned causa la creazione dell'indice da visualizzare ad altre transazioni. In genere, una sessione in una transazione non sarà in grado di visualizzare un'operazione di creazione dell'indice in un'altra sessione. Questo flag può essere utile se è probabile che un'altra transazione crei lo stesso indice. La seconda creazione dell'indice avrà semplicemente esito negativo anziché causare molte operazioni di database non necessarie. La seconda transazione potrebbe non essere in grado di usare immediatamente l'indice. L'operazione di creazione dell'indice deve essere completata prima che sia utilizzabile. La sessione non deve attualmente trovarsi in una transazione per creare un indice senza informazioni sulla versione.

JET_bitIndexSortNullsHigh

Se si specifica questo flag, i valori NULL devono essere ordinati dopo i dati per tutte le colonne dell'indice.

JET_bitIndexUnicode

La specifica di questo flag influisce sull'interpretazione del campo unione lcid/pidxunicde nella struttura. L'impostazione del bit indica che il campo pidxunicode punta effettivamente a una struttura JET_UNICODEINDEX . JET_bitIndexUnicode non è necessario indicizzare i dati Unicode. È necessario personalizzare la normalizzazione dei dati Unicode.

JET_bitIndexTuples

Specifica che l'indice è un indice tuple. Per una descrizione di un indice di tupla, vedere JET_TUPLELIMITS .

Il valore JET_bitIndexTuples è stato introdotto nel sistema operativo Windows XP.

JET_bitIndexTupleLimits

La specifica di questo flag influisce sull'interpretazione del campo di unione cbVarSegMac/ptuplelimits nella struttura. L'impostazione di questo bit significa che il campo ptuplelimits punta effettivamente a una struttura JET_TUPLELIMITS per consentire limiti di indice tuple personalizzati (implica JET_bitIndexTuples).

Il valore JET_bitIndexTupleLimits è stato introdotto nel sistema operativo Windows Server 2003.

JET_bitIndexCrossProduct
0x00004000

Specificando questo flag per un indice con più colonne chiave che è una colonna multivalore, verrà creata una voce di indice per ogni risultato di un prodotto incrociato di tutti i valori di tali colonne chiave. In caso contrario, l'indice avrà una sola voce per ogni multivalore nella colonna chiave più significativa che è una colonna multivalore e ognuna di queste voci di indice userebbe il primo multivalore da tutte le altre colonne chiave che sono colonne multivalore.

Ad esempio, se è stato specificato questo flag per un indice su colonna A con i valori "rosso" e "blu" e sulla colonna B con i valori "1" e "2", verranno create le voci di indice seguenti: "rosso", "1"; "rosso", "2"; "blu", "1"; "blu", "2". In caso contrario, le voci di indice seguenti verranno create: "rosso", "1"; "blu", "1".

Il valore JET_bitIndexCrossProduct è stato introdotto in Windows Vista.

JET_bitIndexKeyMost
0x00008000

Se si specifica questo flag, l'indice userà le dimensioni massime della chiave specificate nel campo cbKeyMost nella struttura. In caso contrario, l'indice userà JET_cbKeyMost (255) come dimensione massima della chiave.

Il valore JET_bitIndexKeyMost è stato introdotto in Windows Vista.

JET_bitIndexDisallowTruncation
0x00010000

Se si specifica questo flag, qualsiasi aggiornamento all'indice che comporta l'esito negativo di una chiave troncata con il codice di risposta JET_errKeyTruncated. In caso contrario, le chiavi verranno troncate in modo silenzioso. Per altre informazioni sul troncamento delle chiavi, vedere JetMakeKey.

Il valore JET_bitIndexDisallowTruncation è stato introdotto in Windows Vista.

ulDensity

Densità percentuale dell'albero B+ indice iniziale. Se si specifica un numero minore di 100, viene usato più spazio per creare inizialmente l'indice, ma consente la crescita futura dell'indice in modo da evitare la frammentazione interna.

lcid

Identificatore delle impostazioni locali (LCID) da usare durante la normalizzazione dei dati quando il valore JET_bitIndexUnicode non è specificato nel parametro grbit . LCID influisce sulla normalizzazione se l'indice è su colonne Unicode.

pidxunicode

Puntatore a una struttura JET_UNICODEINDEX se il valore JET_bitIndexUnicode viene specificato nel parametro grbit . Ciò consente all'utente di specificare flag personalizzati che vengono passati alla funzione LCMapString durante la normalizzazione Unicode.

cbVarSegMac

Lunghezza massima, in byte, di ogni colonna da archiviare nell'indice quando il valore JET_bitIndexTupleLimits non viene specificato nel parametro grbit .

Se si specifica un valore pari a 0 (zero) per questo campo è equivalente al seguente:

  • Specificare JET_cbPrimaryKeyMost per un indice primario.

  • Specifica di JET_cbSecondaryKeyMost per un indice secondario.

ptuplelimits

Puntatore a una struttura JET_TUPLELIMITS se il valore JET_bitIndexTupleLimits viene specificato nel parametro grbit .

ptuplelimits è stato introdotto in Windows Server 2003.

rgconditionalcolumn

Parametro facoltativo per una matrice di strutture JET_CONDITIONALCOLUMN , che vengono usate per specificare le colonne condizionali nell'indice.

cConditionalColumn

Numero di strutture nella matrice rgconditionalcolumn .

err

Contiene il codice restituito per la creazione di questo indice.

cbKeyMost

Specifica le dimensioni massime consentite, in byte, per le chiavi nell'indice. Questo parametro viene ignorato se JET_bitIndexKeyMost non è specificato nel parametro grbit . Se questo parametro è impostato su zero e JET_bitIndexKeyMost viene specificato nel membro grbit , la funzione chiamante avrà esito negativo con JET_err_InvalidDef.

La dimensione massima minima supportata è JET_cbKeyMostMin (255), ovvero la dimensione massima della chiave legacy.

La dimensione massima della chiave dipende dalle dimensioni della pagina del database (JET_paramDatabasePageSize) come indicato di seguito:

  • Se JET_paramDatabasePageSize = 2048, JET_cbKeyMostMin (255) = cbKeyMost<= JET_cbKeyMost2KBytePage (500) <

  • Se JET_paramDatabasePageSize = 4096, JET_cbKeyMostMin (255) = cbKeyMost<= JET_cbKeyMost4KBytePage (1000) <

  • Se JET_paramDatabasePageSize = 8192, JET_cbKeyMostMin (255) = cbKeyMost<= JET_cbKeyMost8KBytePage (2000) <

La dimensione massima supportata della chiave per l'istanza può anche essere letto dal parametro di sistema JET_paramKeyMost.

cbKeyMost è stato introdotto in Windows Vista.

pSpacehints

Puntatore a una struttura JET_SPACEHINTS .

pSpacehints è stato introdotto in Windows 7.

Commenti

ESE supporta l'indicizzazione su colonne chiave contenenti più valori. Per usare questa funzionalità, la colonna deve essere un tipo di colonna con tag (JET_bitColumnTagged) e deve essere contrassegnata per avere i relativi più valori indicizzati con JET_bitColumnMultiValued. Nelle versioni di Windows precedenti a Windows Vista, solo la prima colonna chiave multivalore nell'indice avrà i relativi valori espansi nell'indice. Tutte le altre colonne con tag e multivalore avranno i primi valori espansi nell'indice.

Supponendo che le righe seguenti esistano in una tabella (la colonna Alfa non è multivalore, mentre le colonne Beta, Gamma e Delta sono multivalore) e un indice viene creato come "+Alfa\0+Beta\0+Gamma\0+Delta\0\0":

Alfa

Beta

Gamma

Delta

1

ABC
GHI
JKL

MNO
PQR
STU

VWX
YZ

2

LE

PIOGGIA
SPAGNA

IN
FALLS

Le tuple di indice seguenti verranno archiviate:

{1,ABC,MNO,VWX}
{1,GHI,MNO,VWX}
{1,JKL,MNO,VWX}
{2,THE,RAIN,IN}

Si noti che {2,THE,SPAGNA,IN} non viene archiviato, anche se la colonna Alfa nella seconda riga ha un singolo multivalore.

Nelle versioni di Windows a partire da Windows Vista, tutte le colonne multivalore possono essere espanse nell'indice specificando JET_bitIndexCrossProduct.

Requisiti

Requisito Valore

Client

Richiede Windows Vista, Windows XP o Windows 2000 Professional.

Server

Richiede Windows Server 2008, Windows Server 2003 o Windows 2000 Server.

Intestazione

Dichiarato in Esent.h.

Unicode

Implementato come JET_ INDEXCREATE2_W (Unicode) e JET_ INDEXCREATE2_A (ANSI).

Vedi anche

JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate