Estructura de JET_INDEXCREATE2

Se aplica a: Windows | Windows Server

La estructura JET_INDEXCREATE2 contiene la información necesaria para crear un índice sobre 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.

La estructura JET_INDEXCREATE2 se introdujo en el 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;

Miembros

cbStruct

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

szIndexName

Nombre del índice que se va a crear.

El nombre debe cumplir las condiciones siguientes:

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

  • Debe constar del siguiente conjunto de 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 y 0x5d a través de 0x7f.

  • No debe comenzar con un espacio.

  • Debe contener al menos un carácter que no sea de 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 que la cadena anterior finalizará con un valor double-NULL.

El número de columnas especificadas en szKey no debe superar 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 un tipo de datos de 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, incluidos los dos valores NULL de terminación.

grbit

Grupo de bits que contienen cero o más de las opciones de valor que se enumeran 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

Especifica que 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 y, a continuación, se crea un índice sobre esta columna recién agregada, todos los registros de la tabla se examinan 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

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. La segunda creación de índices simplemente producirá un error 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 indexar datos Unicode. Solo es necesario personalizar la normalización de los 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.

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

El valor 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 con 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".

El valor JET_bitIndexCrossProduct se introdujo en 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.

El valor de 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 el código de respuesta JET_errKeyTruncated. De lo contrario, las claves se truncarán silenciosamente. Para obtener más información sobre el truncamiento de claves, consulte JetMakeKey.

El valor de JET_bitIndexDisallowTruncation se introdujo en Windows Vista.

ulDensity

Densidad porcentual del árbol inicial de índice B+. Al especificar un número menor que 100, se usa 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 lo siguiente:

  • Especificar JET_cbPrimaryKeyMost para un índice principal.

  • Especificar JET_cbSecondaryKeyMost para un índice secundario.

ptuplelimits

Puntero a una estructura de JET_TUPLELIMITS si el valor de 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 del í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 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 miembro 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) de la siguiente manera:

  • 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 máximo admitido para la instancia también se puede leer desde el parámetro del sistema JET_paramKeyMost.

cbKeyMost se introdujo en Windows Vista.

pSpacehints

Puntero a una estructura de JET_SPACEHINTS .

pSpacehints se introdujo en Windows 7.

Observaciones

ESE admite la indexación sobre 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 estén indexados 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 con varios valores y etiquetados 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 son multivalor) y se crea un índice como "+Alfa\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

Se almacenarán las siguientes tuplas de índice:

{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 con varios valores 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_ INDEXCREATE2_W (Unicode) y JET_ INDEXCREATE2_A (ANSI).

Consulte también

JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate