Struttura JET_INDEXCREATE

Si applica a: Windows | Windows Server

La struttura JET_INDEXCREATE 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.

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;

Membri

cbStruct

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

szIndexName

Nome dell'indice da creare.

Il nome dell'indice deve soddisfare le condizioni seguenti:

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

  • Deve essere costituito dai caratteri seguenti: 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, 0x5d tramite 0x7f.

  • Non deve iniziare con uno spazio.

  • Deve essere costituito da 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; pertanto, la stringa precedente verrà terminata da un valore DOUBLE-NULL.

Il numero di colonne specificate in szKey potrebbe non superare il valore di 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 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 valori Null terminanti.

grbit

Gruppo di bit che include zero o più dei valori elencati 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

Le operazioni di indice verranno registrate in modo 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 tentare di compilare l'indice, perché tutte le voci valutano NULL. grbit deve anche specificare 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, viene creato un indice su questa colonna appena aggiunta e 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

Causa la creazione dell'indice per essere visibile 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à 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 per indicizzare i dati Unicode. Viene usato solo per 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 .

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).

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".

JET_bitIndexCrossProduct è stato introdotto nel sistema operativo 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.

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 JET_errKeyTruncated. In caso contrario, le chiavi verranno troncate in modo silenzioso. Per altre informazioni sul troncamento della chiave, vedere la funzione JetMakeKey .

Windows Vista: JET_bitIndexDisallowTruncation viene introdotto in Windows Vista.

JET_bitIndexNestedTable 0x00020000

Se si specifica questo flag, l'indice verrà aggiornato su più colonne multivalore, ma solo con valori dello stesso itagSequence.

JET_bitIndexNestedTable è 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 .

La specifica di un valore pari a 0 (zero) per questo campo equivale a:

  • 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 il valore JET_bitIndexKeyMost non è specificato nel parametro grbit . Se questo parametro è impostato su zero e JET_bitIndexKeyMost viene specificato nel parametro 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.

Le dimensioni massime della chiave dipendono 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) <

Le dimensioni massime supportate della chiave per l'istanza possono essere lette anche dal parametro di sistema JET_paramKeyMost.

cbKeyMost è stato introdotto in Windows Vista.

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 in caduta 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

Implementata come JET_ INDEXCREATE_W (Unicode) e JET_ INDEXCREATE_A (ANSI).

Vedi anche

JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate