Структура JET_INDEXCREATE
Применимо к: Windows | Windows Server
Структура JET_INDEXCREATE содержит сведения, необходимые для создания индекса данных в базе данных ESE. Структура используется такими функциями, как JetCreateIndex2, и в таких структурах, как JET_TABLECREATE и 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;
Элементы
cbStruct
Размер данной структуры (в байтах). Задайте для этого элемента значение sizeof( JET_INDEXCREATE ).
szIndexName
Имя создаваемого индекса.
Имя индекса должно соответствовать следующим условиям:
Оно должно быть меньше JET_cbNameMost, не включая завершающее значение NULL.
Он должен состоять из следующих символов: от 0 (ноля) до 9, от A до Z, от a до z и всех других знаков препинания, кроме "!" (восклицательный знак), "," (запятая), "[" (открывающая скобка) и "]" (закрывающая скобка) — символы ASCII 0x20, 0x22 0x2d, 0x2f 0x5a, 0x5c, 0x5d 0x7f.
Она не должна начинаться с пробела.
Он должен состоять по крайней мере из одного непространствого символа.
szKey
Указатель на строку с двойным завершением null маркеров с разделителями NULL.
Каждый токен имеет форму "<имя столбца-описатель><> направления", где спецификация направления имеет значение "+" или "-". Например, szKey "+abc\0-def\0+ghi\0" будет индексироваться по трем столбцам "abc" (в порядке возрастания), "def" (в порядке убывания) и "ghi" (в порядке возрастания). В языке C строковые литералы имеют подразумеваемый признак конца NULL ; Таким образом, приведенная выше строка будет завершена двойным значением NULL.
Число столбцов, указанных в szKey , не может превышать значение JET_ccolKeyMost (константы, зависящей от версии).
По крайней мере один столбец должен иметь имя в szKey.
Устаревшее поведение. После признака конца double-NULL можно указать идентификатор языка (WORD, который передается в MAKELCID( langid, SORT_DEFAULT ) для указания LCID для индекса. Недопустимо указывать идентификатор языка в szKey и LCID в JET_UNICODEINDEX (задав JET_bitIndexUnicode в grbit).
Не рекомендуется: после идентификатора языка можно передать cbVarSegMac в качестве USHORT. Поведение не определено, если USHORT задан как в szKey, так и в случае , если cbVarSegMac задан в структуре.
cbKey
Длина (в байтах) szKey , включая два завершающих значения NULL.
grbit
Группа битов, включающая ноль или более значений, перечисленных в следующей таблице.
Значение |
Значение |
---|---|
JET_bitIndexUnique |
Повторяющиеся записи индекса (ключи) не допускаются. Это применяется при вызове JetUpdate , а не при вызове JetSetColumn . |
JET_bitIndexPrimary |
Индекс является первичным (кластеризованным). Каждая таблица должна иметь ровно один первичный индекс. Если в таблице явно не определен первичный индекс, ядро СУБД создаст собственный первичный индекс. |
JET_bitIndexDisallowNull |
Ни один из столбцов, для которых создается индекс, не может содержать значение NULL . |
JET_bitIndexIgnoreNull |
Не добавляйте запись индекса для строки, если все индексированные столбцы имеют значение NULL. |
JET_bitIndexIgnoreAnyNull |
Не добавляйте запись индекса для строки, если какой-либо из индексированных столбцов имеет значение NULL. |
JET_bitIndexIgnoreFirstNull |
Не добавляйте запись индекса для строки, если первый индексируемого столбца имеет значение NULL. |
JET_bitIndexLazyFlush |
Операции с индексами регистрируются отложенно. JET_bitIndexLazyFlush не влияет на лень обновления данных. Если операция индексирования прерывается завершением процесса, soft Recovery по-прежнему сможет привести базу данных в согласованное состояние, но индекс может отсутствовать. |
JET_bitIndexEmpty |
Не пытайтесь создать индекс, так как все записи будут иметь значение NULL. При передаче JET_bitIndexEmpty необходимо также указать JET_bitIgnoreAnyNull. Это повышение производительности. Например, при добавлении нового столбца в таблицу создается индекс для этого добавленного столбца, и все записи в таблице проверяются, даже если они не добавляются в индекс. При указании JET_bitIndexEmpty пропускается проверка таблицы, что может занять много времени. |
JET_bitIndexUnversioned |
Приводит к тому, что создание индекса будет видимым для других транзакций. Как правило, сеанс транзакции не может видеть операцию создания индекса в другом сеансе. Этот флаг может быть полезен, если другая транзакция, скорее всего, создаст тот же индекс. Вторая операция создания индекса завершится сбоем, а не может привести к множеству ненужных операций базы данных. Вторая транзакция может не использовать индекс немедленно. Операция создания индекса должна быть завершена, прежде чем она будет доступна для использования. Сеанс не должен находиться в транзакции для создания индекса без сведений о версии. |
JET_bitIndexSortNullsHigh |
При указании этого флага значения NULL будут отсортированы после данных для всех столбцов в индексе. |
JET_bitIndexUnicode |
Указание этого флага влияет на интерпретацию поля объединения lcid/pidxunicde в структуре. Задание бита означает, что поле pidxunicode фактически указывает на структуру JET_UNICODEINDEX . JET_bitIndexUnicode не требуется для индексирования данных Юникода. Он используется только для настройки нормализации данных Юникода. |
JET_bitIndexTuples |
Указывает, что индекс является индексом кортежа. Описание индекса кортежа см. в JET_TUPLELIMITS . JET_bitIndexTuples появилась в операционной системе Windows XP. |
JET_bitIndexTupleLimits |
Указание этого флага влияет на интерпретацию поля объединения cbVarSegMac/ptuplelimits в структуре. Установка этого бита означает, что поле ptuplelimits фактически указывает на структуру JET_TUPLELIMITS , чтобы разрешить ограничения индекса настраиваемых кортежей (подразумевает JET_bitIndexTuples). JET_bitIndexTupleLimits появилась в операционной системе Windows Server 2003. |
JET_bitIndexCrossProduct 0x00004000 |
Указание этого флага для индекса с несколькими ключевыми столбцами, которые являются многозначными, приведет к созданию записи индекса для каждого результата перекрестного произведения всех значений в этих ключевых столбцах. В противном случае индекс будет иметь только одну запись для каждого многозначного ключевого столбца, который является многозначным столбцом, и каждая из этих записей индекса будет использовать первое многозначное значение из всех других ключевых столбцов, которые являются многозначными столбцами. Например, если вы указали этот флаг для индекса в столбце A со значениями "красный" и "синий" и по столбцу B со значениями "1" и "2", будут созданы следующие записи индекса: "красный", "1"; "red", "2"; "синий", "1"; "синий", "2". В противном случае будут созданы следующие записи индекса: "red", "1"; "синий", "1". JET_bitIndexCrossProduct появилась в операционной системе Windows Vista. |
JET_bitIndexKeyMost 0x00008000 |
Если указать этот флаг, индекс будет использовать максимальный размер ключа, указанный в поле cbKeyMost в структуре. В противном случае индекс будет использовать JET_cbKeyMost (255) в качестве максимального размера ключа. JET_bitIndexKeyMost появилась в Windows Vista. |
JET_bitIndexDisallowTruncation 0x00010000 |
Указание этого флага приведет к сбою любого обновления индекса, которое приведет к сбою усеченного ключа с JET_errKeyTruncated. В противном случае ключи будут усекаются без уведомления. Дополнительные сведения об усечении ключа см. в разделе Функция JetMakeKey . Windows Vista: JET_bitIndexDisallowTruncation появилась в Windows Vista. |
JET_bitIndexNestedTable 0x00020000 |
Указание этого флага приведет к обновлению индекса по нескольким многозначным столбцам, но только со значениями одной и той же itagSequence. JET_bitIndexNestedTable появилась в Windows Vista. |
ulDensity
Процентная плотность дерева начального индекса B+. При указании числа меньше 100 требуется больше места для первоначального создания индекса, но при этом индекс будет расти в будущем, что позволяет избежать внутренней фрагментации.
lcid
Идентификатор языкового стандарта (LCID), используемый при нормализации данных, если значение JET_bitIndexUnicode не указано в параметре grbit . Код кода влияет на нормализацию, если индекс превышает столбцы Юникода.
pidxunicode
Указатель на структуру JET_UNICODEINDEX , если значение JET_bitIndexUnicode указано в параметре grbit . Это позволяет пользователю указать пользовательские флаги, которые передаются функции LCMapString во время нормализации Юникода.
cbVarSegMac
Максимальная длина (в байтах) каждого столбца для хранения в индексе, если значение JET_bitIndexTupleLimits не указано в параметре grbit .
Указание значения 0 (ноль) для этого поля эквивалентно:
Указание JET_cbPrimaryKeyMost для первичного индекса.
Указание JET_cbSecondaryKeyMost для вторичного индекса.
ptuplelimits
Указатель на структуру JET_TUPLELIMITS , если значение JET_bitIndexTupleLimits указано в параметре grbit .
ptuplelimits появился в Windows Server 2003.
rgconditionalcolumn
Необязательный параметр массива JET_CONDITIONALCOLUMN структур, которые используются для указания условных столбцов в индексе.
cConditionalColumn
Количество структур в массиве rgconditionalcolumn .
Err
Содержит код возврата для создания этого индекса.
cbKeyMost
Указывает максимальный допустимый размер ключей в индексе в байтах. Этот параметр игнорируется, если значение JET_bitIndexKeyMost не указано в параметре grbit . Если для этого параметра задано значение 0 и JET_bitIndexKeyMost указано в параметре grbit , вызывающая функция завершится сбоем с JET_err_InvalidDef.
Минимальный поддерживаемый максимальный размер ключа — JET_cbKeyMostMin (255), который является максимальным размером ключа прежних версий.
Максимальный размер ключа зависит от размера страницы базы данных (JET_paramDatabasePageSize), как показано ниже.
Если JET_paramDatabasePageSize = 2048, то JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost2KBytePage (500)
Если JET_paramDatabasePageSize = 4096, то JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost4KBytePage (1000)
Если JET_paramDatabasePageSize = 8192, то JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost8KBytePage (2000)
Максимальный поддерживаемый размер ключа для экземпляра также можно считать из системного параметра JET_paramKeyMost.
cbKeyMost появился в Windows Vista.
Комментарии
ESE поддерживает индексирование по ключевым столбцам, содержащим несколько значений. Чтобы использовать эту функцию, столбец должен быть типом столбца с тегами (JET_bitColumnTagged) и должен быть помечен для индексации нескольких значений с помощью JET_bitColumnMultiValued. В версиях Windows, предшествующих Windows Vista, только первый многозначный ключевой столбец в индексе будет иметь свои значения, развернутые в индексе. Для всех остальных многозначных столбцов и столбцов с тегами в индексе будут развернуты только первые значения.
Предположим, что в таблице существуют следующие строки (столбец Альфа не является многозначным, а столбцы Beta, Gamma и Delta являются многозначными), а индекс создается как "+Alpha\0+Beta\0+Gamma\0+Delta\0\0":
Коэффициент альфа |
Бета-версия |
Gamma |
Разностная версия |
---|---|---|---|
1 |
ABC |
MNO |
VWX |
2 |
TEH |
ДОЖДЬ |
IN |
Будут сохранены падающие кортежи индексов:
{1,ABC,MNO,VWX}
{1,GHI,MNO,VWX}
{1,JKL,MNO,VWX}
{2,THE,RAIN,IN}
Обратите внимание, что {2,THE,SPAIN,IN} не хранится, хотя столбец Alpha во второй строке имеет одно многозначное значение.
В версиях Windows, начиная с Windows Vista, все многозначные столбцы можно развернуть в индексе, указав JET_bitIndexCrossProduct.
Требования
Требование | Значение |
---|---|
Клиент |
Требуется Windows Vista, Windows XP или Windows 2000 Профессиональная. |
Сервер |
Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server. |
Верхняя часть |
Объявлено в Esent.h. |
Юникод |
Реализовано в виде JET_ INDEXCREATE_W (Юникод) и JET_ INDEXCREATE_A (ANSI). |
См. также раздел
JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate