Структура JET_INDEXCREATE2
Применимо к: Windows | Windows Server
Структура JET_INDEXCREATE2 содержит сведения, необходимые для создания индекса данных в базе данных ESE. Структура используется такими функциями, как JetCreateIndex2, и в таких структурах, как JET_TABLECREATE и JET_TABLECREATE2.
Структура JET_INDEXCREATE2 появилась в операционной системе 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;
Элементы
cbStruct
Размер данной структуры (в байтах). Задайте для этого элемента значение sizeof( JET_INDEXCREATE2 ).
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 , поэтому приведенная выше строка будет заканчиваться значением double-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 не влияет на лень обновления данных. Если операция индексирования прерывается завершением процесса, обратимое восстановление по-прежнему сможет привести базу данных в согласованное состояние, но индекс может отсутствовать. |
JET_bitIndexEmpty |
Не пытайтесь создать индекс, так как все записи будут иметь значение NULL. grbit НЕОБХОДИМО также указать JET_bitIgnoreAnyNull при передаче JET_bitIndexEmpty. Это повышение производительности. Например, если в таблицу добавляется новый столбец, а затем создается индекс для этого добавленного столбца, все записи в таблице проверяются, даже если они не добавляются в индекс. Указание JET_bitIndexEmpty пропускает сканирование таблицы, что может занять много времени. |
JET_bitIndexUnversioned |
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 |
Если указать этот флаг для индекса с несколькими ключевыми столбцами, которые являются многозначными, будет создана запись индекса для каждого результата перекрестного произведения всех значений в этих ключевых столбцах. В противном случае индекс будет иметь только одну запись для каждого многозначного ключевого столбца, который является многозначным столбцом, и каждая из этих записей индекса будет использовать первое многозначное значение из любых других ключевых столбцов, которые являются многозначными столбцами. Например, если вы указали этот флаг для индекса по столбцу A со значениями "red" и "blue" и по столбцу B со значениями "1" и "2", будут созданы следующие записи индекса: "red", "1"; "red", "2"; "blue", "1"; "blue", "2". В противном случае будут созданы следующие записи индекса: "red", "1"; "blue", "1". Значение JET_bitIndexCrossProduct появилось в Windows Vista. |
JET_bitIndexKeyMost |
Если указать этот флаг, индекс будет использовать максимальный размер ключа, указанный в поле cbKeyMost структуры. В противном случае индекс будет использовать JET_cbKeyMost (255) в качестве максимального размера ключа. Значение JET_bitIndexKeyMost появилось в Windows Vista. |
JET_bitIndexDisallowTruncation |
Указание этого флага приведет к сбою любого обновления индекса, которое приведет к сбою усеченного ключа с кодом ответа JET_errKeyTruncated. В противном случае ключи будут автоматически усечены. Дополнительные сведения об усечении ключей см. в разделе JetMakeKey. Значение JET_bitIndexDisallowTruncation появилось в 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 . Если этот параметр равен нулю и 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.
PSpacehints
Указатель на структуру JET_SPACEHINTS .
PSpacehints появился в Windows 7.
Комментарии
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} не хранится, несмотря на то, что столбец Альфа во второй строке имеет одно многозначное значение.
В версиях Windows, начиная с Windows Vista, все многозначные столбцы можно развернуть в индексе, указав JET_bitIndexCrossProduct.
Требования
Требование | Значение |
---|---|
Клиент |
Требуется Windows Vista, Windows XP или Windows 2000 Professional. |
Сервер |
Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server. |
Верхняя часть |
Объявлено в Esent.h. |
Юникод |
Реализовано как JET_ INDEXCREATE2_W (Юникод) и JET_ INDEXCREATE2_A (ANSI). |
См. также раздел
JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate