Estructura de JET_INDEXCREATE

Se aplica a: Windows | Windows Server

La estructura JET_INDEXCREATE contiene la información necesaria para crear un índice a través de los datos en una base de datos del motor de almacenamiento extensible (ESE). La estructura se usa en funciones como JetCreateIndex2 y en estructuras como JET_TABLECREATE y 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;

Miembros

cbStruct

Tamaño, en bytes, de esta estructura. Establezca este miembro en sizeof( JET_INDEXCREATE ).

szIndexName

Nombre del índice que se va a crear.

El nombre del índice debe cumplir las condiciones siguientes:

  • Debe ser menor que JET_cbNameMost, sin incluir el valor NULL de terminación.

  • Debe constar de los siguientes caracteres: 0 (cero) a 9, A a Z, a a z y todos los demás signos de puntuación, excepto "!" (signo de exclamación), "," (coma), "[" (corchete de apertura) y "]" (corchete de cierre), es decir, caracteres ASCII 0x20, 0x22 a través de 0x2d, 0x2f a través de 0x5a, 0x5c, 0x5d a 0x7f.

  • No debe comenzar con un espacio.

  • Debe constar de al menos un carácter no espacio.

szKey

Puntero a una cadena terminada en null doble de tokens delimitados por null.

Cada token tiene el formato "<direction-specifier><column-name>", donde direction-specification es "+" o "-". Por ejemplo, un szKey de "+abc\0-def\0+ghi\0" indexará sobre las tres columnas "abc" (en orden ascendente), "def" (en orden descendente) y "ghi" (en orden ascendente). En el lenguaje C, los literales de cadena tienen un terminador NULL implícito; por lo tanto, la cadena anterior finalizará con un valor double-NULL.

Es posible que el número de columnas especificadas en szKey no supere el valor de JET_ccolKeyMost (una constante dependiente de la versión).

Al menos una columna debe tener un nombre en szKey.

Comportamiento obsoleto: después del terminador double-NULL, es posible especificar un identificador de idioma (un WORD que se pasa a MAKELCID( langid, SORT_DEFAULT ) como una manera de especificar el LCID para el índice. No es válido especificar un identificador de idioma en szKey y un LCID en JET_UNICODEINDEX (estableciendo JET_bitIndexUnicode en grbit).

En desuso: después del identificador de idioma, es posible pasar cbVarSegMac como USHORT. El comportamiento no está definido si USHORT se establece en szKey y si cbVarSegMac está establecido en la estructura .

cbKey

Longitud, en bytes, de szKey , que incluye los dos valores NULL de terminación.

grbit

Grupo de bits que incluye cero o más de los valores enumerados en la tabla siguiente.

Valor

Significado

JET_bitIndexUnique

No se permiten entradas de índice duplicadas (claves). Esto se aplica cuando se llama a JetUpdate , no cuando se llama a JetSetColumn .

JET_bitIndexPrimary

El índice es un índice principal (agrupado). Cada tabla debe tener exactamente un índice principal. Si no se define explícitamente ningún índice principal en una tabla, el motor de base de datos creará su propio índice principal.

JET_bitIndexDisallowNull

Ninguna de las columnas en las que se crea el índice puede contener un valor NULL .

JET_bitIndexIgnoreNull

No agregue una entrada de índice para una fila si todas las columnas que se indexan son NULL.

JET_bitIndexIgnoreAnyNull

No agregue una entrada de índice para una fila si alguna de las columnas indizada es NULL.

JET_bitIndexIgnoreFirstNull

No agregue una entrada de índice para una fila si la primera columna que se está indexando es NULL.

JET_bitIndexLazyFlush

Las operaciones de índice se registrarán de forma diferir.

JET_bitIndexLazyFlush no afecta a la diferencia de las actualizaciones de datos. Si la operación de indexación se interrumpe mediante la finalización del proceso, la recuperación temporal seguirá siendo capaz de obtener la base de datos a un estado coherente, pero es posible que el índice no esté presente.

JET_bitIndexEmpty

No intente compilar el índice, ya que todas las entradas se evaluarían como NULL. Grbit también debe especificar JET_bitIgnoreAnyNull cuando se pasa JET_bitIndexEmpty. Se trata de una mejora del rendimiento. Por ejemplo, si se agrega una nueva columna a una tabla, se crea un índice sobre esta columna recién agregada y se examinan todos los registros de la tabla aunque no se agreguen al índice. Al especificar JET_bitIndexEmpty se omite el examen de la tabla, lo que podría tardar mucho tiempo.

JET_bitIndexUnversioned

Hace que la creación de índices sea visible para otras transacciones. Normalmente, una sesión de una transacción no podrá ver una operación de creación de índices en otra sesión. Esta marca puede ser útil si es probable que otra transacción cree el mismo índice. Se producirá un error en la segunda creación de índices en lugar de provocar muchas operaciones de base de datos innecesarias. Es posible que la segunda transacción no pueda usar el índice inmediatamente. La operación de creación de índices debe completarse antes de que se pueda usar. La sesión no debe estar actualmente en una transacción para crear un índice sin información de versión.

JET_bitIndexSortNullsHigh

Si se especifica esta marca, los valores NULL se ordenarán después de los datos de todas las columnas del índice.

JET_bitIndexUnicode

Especificar esta marca afecta a la interpretación del campo de unión lcid/pidxunicde en la estructura. Establecer el bit significa que el campo pidxunicode apunta realmente a una estructura de JET_UNICODEINDEX . JET_bitIndexUnicode no es necesario para indexar datos Unicode. Solo se usa para personalizar la normalización de datos Unicode.

JET_bitIndexTuples

Especifica que el índice es un índice de tupla. Consulte JET_TUPLELIMITS para obtener una descripción de un índice de tupla.

JET_bitIndexTuples se introdujo en el sistema operativo Windows XP.

JET_bitIndexTupleLimits

Especificar esta marca afecta a la interpretación del campo de unión cbVarSegMac/ptuplelimits de la estructura. Establecer este bit significa que el campo ptuplelimits apunta realmente a una estructura de JET_TUPLELIMITS para permitir límites de índice de tupla personalizados (implica JET_bitIndexTuples).

JET_bitIndexTupleLimits se introdujo en el sistema operativo Windows Server 2003.

JET_bitIndexCrossProduct 0x00004000

Si se especifica esta marca para un índice que tiene más de una columna de clave que es una columna de varios valores, se creará una entrada de índice para cada resultado de un producto cruzado de todos los valores de esas columnas de clave. De lo contrario, el índice solo tendría una entrada para cada valor múltiple en la columna de clave más significativa que es una columna multivalor y cada una de esas entradas de índice usaría el primer valor múltiple de cualquier otra columna de clave que sean columnas de varios valores.

Por ejemplo, si especificó esta marca para un índice sobre la columna A que tiene los valores "rojo" y "azul" y sobre la columna B que tiene los valores "1" y "2", se crearían las siguientes entradas de índice: "rojo", "1"; "rojo", "2"; "azul", "1"; "azul", "2". De lo contrario, se crearían las siguientes entradas de índice: "rojo", "1"; "azul", "1".

JET_bitIndexCrossProduct se introdujo en el sistema operativo Windows Vista.

JET_bitIndexKeyMost 0x00008000

Si se especifica esta marca, el índice usará el tamaño máximo de clave especificado en el campo cbKeyMost de la estructura. De lo contrario, el índice usará JET_cbKeyMost (255) como tamaño máximo de clave.

JET_bitIndexKeyMost se introdujo en Windows Vista.

JET_bitIndexDisallowTruncation 0x00010000

Si se especifica esta marca, se producirá un error en cualquier actualización del índice que provocaría un error en una clave truncada con JET_errKeyTruncated. De lo contrario, las claves se truncarán silenciosamente. Para obtener más información sobre el truncamiento de teclas, consulte la función JetMakeKey .

Windows Vista: JET_bitIndexDisallowTruncation se introduce en Windows Vista.

JET_bitIndexNestedTable 0x00020000

Si se especifica esta marca, se actualizará el índice en varias columnas multivalor, pero solo con valores de la misma itagSequence.

JET_bitIndexNestedTable se introdujo en Windows Vista.

ulDensity

Densidad porcentual del árbol B+ de índice inicial. La especificación de un número menor que 100 utiliza más espacio para crear el índice inicialmente, pero permite que el crecimiento futuro del índice esté en vigor, lo que evita la fragmentación interna.

lcid

Identificador de configuración regional (LCID) que se va a usar al normalizar los datos cuando el valor de JET_bitIndexUnicode no se especifica en el parámetro grbit . El LCID afecta a la normalización si el índice se encuentra sobre columnas Unicode.

pidxunicode

Puntero a una estructura de JET_UNICODEINDEX si el valor de JET_bitIndexUnicode se especifica en el parámetro grbit . Esto permite al usuario especificar marcas personalizadas que se pasan a la función LCMapString durante la normalización unicode.

cbVarSegMac

Longitud máxima, en bytes, de cada columna que se va a almacenar en el índice cuando el valor de JET_bitIndexTupleLimits no se especifica en el parámetro grbit .

Especificar un valor de 0 (cero) para este campo equivale a:

  • Especificar JET_cbPrimaryKeyMost para un índice principal.

  • Especificar JET_cbSecondaryKeyMost para un índice secundario.

ptuplelimits

Puntero a una estructura JET_TUPLELIMITS si el valor JET_bitIndexTupleLimits se especifica en el parámetro grbit .

ptuplelimits se introdujo en Windows Server 2003.

rgconditionalcolumn

Parámetro opcional para una matriz de estructuras de JET_CONDITIONALCOLUMN , que se usan para especificar las columnas condicionales en el índice.

cConditionalColumn

Recuento de estructuras de la matriz rgconditionalcolumn .

err

Contiene el código de retorno para crear este índice.

cbKeyMost

Especifica el tamaño máximo permitido, en bytes, para las claves del índice. Este parámetro se omite si el valor JET_bitIndexKeyMost no se especifica en el parámetro grbit . Si este parámetro se establece en cero y JET_bitIndexKeyMost se especifica en el parámetro grbit , se producirá un error en la función de llamada con JET_err_InvalidDef.

El tamaño máximo de clave mínimo admitido es JET_cbKeyMostMin (255), que es el tamaño máximo de clave heredado.

El tamaño máximo de clave depende del tamaño de página de la base de datos (JET_paramDatabasePageSize), como se indica a continuación:

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

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

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

El tamaño máximo de clave admitido para la instancia también se puede leer desde el parámetro del sistema JET_paramKeyMost.

cbKeyMost se introdujo en Windows Vista.

Observaciones

ESE admite la indexación en columnas de clave que contienen varios valores. Para usar esta característica, la columna debe ser un tipo de columna etiquetado (JET_bitColumnTagged) y debe marcarse para que sus varios valores se indexen con JET_bitColumnMultiValued. En versiones de Windows anteriores a Windows Vista, solo la primera columna de clave multivalor del índice tendrá sus valores expandidos en el índice. Todas las demás columnas multivalor y etiquetadas solo tendrán sus primeros valores expandidos en el índice.

Suponiendo que las filas siguientes existen en una tabla (la columna Alfa no tiene varios valores, mientras que las columnas Beta, Gamma y Delta tienen varios valores) y se crea un índice como "+Alpha\0+Beta\0+Gamma\0+Delta\0\0\0":

Alpha

Beta

Gamma

Delta

1

ABC
GHI
JKL

MNO
PQR
STU

VWX
YZ

2

EL

LLUVIA
ESPAÑA

IN
CAE

Las tuplas de índice que caen se almacenarán:

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

Tenga en cuenta que {2,THE,SPAIN,IN} no se almacena, aunque la columna Alfa de la segunda fila tenga un solo valor múltiple.

En versiones de Windows a partir de Windows Vista, todas las columnas multivalor se pueden expandir en el índice especificando JET_bitIndexCrossProduct.

Requisitos

Requisito Value

Cliente

Requiere Windows Vista, Windows XP o Windows 2000 Professional.

Servidor

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

Encabezado

Declarado en Esent.h.

Unicode

Se implementa como JET_ INDEXCREATE_W (Unicode) y JET_ INDEXCREATE_A (ANSI).

Vea también

JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate