JET_INDEXCREATE2 結構
適用于: Windows |Windows Server
JET_INDEXCREATE2結構包含在可延伸儲存體引擎中建立索引所需的資訊, (ESE) 資料庫。 結構是由 JetCreateIndex2等函式使用,以及 JET_TABLECREATE 和 JET_TABLECREATE2等結構。
windows 7 作業系統中引進 了JET_INDEXCREATE2 結構。
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 0x5a到0x2d、0x2f、0x5c和0x5d 0x7f。
它不得以空格開頭。
它至少必須包含一個非空白字元。
szKey
以 Null 分隔之標記之雙 Null 終止字串的指標。
每個標記的格式都是 「 < direction-specifier >< column-name > 」,其中 direction-specification 是 「+」 或 「-」。 例如,「+abc\0-def\0+ghi\0」 的 szKey 會以遞增順序 (「abc」 (,「def」 (遞減順序) ,而 「ghi」 (以遞增) 順序) 。 在 C 語言中,字串常值具有隱含 的 Null 結束字元,因此上述字串將會由雙 Null 終止。
szKey中指定的資料行數目不能超過版本相依常數) JET_ccolKeyMost (。
至少必須在 szKey中命名一個資料行。
過時的行為:在雙 Null 結束字元之後,可以指定語言識別項 (傳遞至 MAKELCID ( langid 的 WORD,SORT_DEFAULT ) ) 做為指定索引 LCID 的方法。 藉由在grbit) 中設定JET_bitIndexUnicode,在JET_UNICODEINDEX (中指定語言識別項和 LCID 不合法。
已被取代:語言識別項之後,可以傳遞 cbVarSegMac 作為 USHORT 資料類型。 如果在 szKey 中設定 USHORT,而且 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。 grbit 也必須在傳遞JET_bitIndexEmpty時指定JET_bitIgnoreAnyNull。 這是效能增強功能。 例如,如果將新的資料行加入資料表,然後透過這個新加入的資料行建立索引,即使資料表中的所有記錄都未新增至索引,也會掃描資料表中的所有記錄。 指定JET_bitIndexEmpty會略過資料表的掃描,這可能需要很長的時間。 |
JET_bitIndexUnversioned |
JET_bitIndexUnversioned會導致其他交易看到索引建立。 一般而言,交易中的會話將無法在另一個會話中看到索引建立作業。 如果另一筆交易可能建立相同的索引,此旗標可能會很有用。 第二個索引建立只會失敗,而不會造成許多不必要的資料庫作業。 第二筆交易可能無法立即使用索引。 索引建立作業必須先完成,才能使用。 會話目前不得在交易中,以在沒有版本資訊的情況下建立索引。 |
JET_bitIndexSortNullsHigh |
指定此旗標會導致 在 索引中所有資料行的資料之後排序 Null 值。 |
JET_bitIndexUnicode |
指定此旗標會影響 結構中 lcid/pidxunicde 等位欄位的解譯。 設定位表示 pidxunicode 欄位實際上指向 JET_UNICODEINDEX 結構。 JET_bitIndexUnicode不需要索引 Unicode 資料。 只需要自訂 Unicode 資料的正規化。 |
JET_bitIndexTuples |
指定索引是元組索引。 如需 Tuple 索引的描述,請參閱 JET_TUPLELIMITS 。 Windows XP 作業系統中引進了JET_bitIndexTuples值。 |
JET_bitIndexTupleLimits |
指定此旗標會影響結構中 cbVarSegMac/ptuplelimits 等位欄位的解譯。 設定此位表示 ptuplelimits 欄位實際上指向 JET_TUPLELIMITS 結構,以允許自訂 Tuple 索引限制 (表示JET_bitIndexTuples) 。 Windows Server 2003 作業系統中引進 了JET_bitIndexTupleLimits 值。 |
JET_bitIndexCrossProduct |
針對索引指定這個旗標,此索引具有一個以上的索引鍵資料行,該索引行是多重值資料行,將會產生針對這些索引鍵資料行中所有值之交叉乘積的每個結果建立索引項目。 否則,索引在最重要的索引鍵資料行中,每個多重值只會有一個專案,而且每個索引項目目都會使用來自任何其他多重值資料行的第一個多重值。 例如,如果您針對具有值 「red」 和 「blue」 的資料行 A 指定此旗標,而且在具有值 「1」 和 「2」 的資料行 B 上指定此旗標,則會建立下列索引項目目:「red」、「1」。「red」, 「2」;「blue」, 「1」;「blue」、「2」。 否則,將會建立下列索引項目目:「red」、「1」;「blue」、「1」。 windows Vista 中引進 了JET_bitIndexCrossProduct 值。 |
JET_bitIndexKeyMost |
指定此旗標會導致索引使用結構中 cbKeyMost 欄位中所指定的索引鍵大小上限。 否則,索引會使用JET_cbKeyMost (255) 作為索引鍵大小上限。 Windows Vista 中引進 了JET_bitIndexKeyMost 值。 |
JET_bitIndexDisallowTruncation |
指定此旗標會導致索引的任何更新導致截斷索引鍵失敗,並出現JET_errKeyTruncated回應碼。 否則,金鑰會以無訊息方式截斷。 如需金鑰截斷的詳細資訊,請參閱 JetMakeKey。 Windows Vista 中引進 了JET_bitIndexDisallowTruncation 值。 |
ulDensity
初始索引 B+ 樹狀結構的百分比密度。 指定小於 100 的數位一開始會耗用更多空間來建立索引,但允許未來就地成長索引,因而避免內部片段。
lcid
地區設定識別碼 (LCID) 在 grbit 參數中未指定JET_bitIndexUnicode值時,將資料正規化時使用。 如果索引超過 Unicode 資料行,LCID 會影響正規化。
pidxunicode
如果grbit參數中指定了JET_bitIndexUnicode值,則為JET_UNICODEINDEX結構的指標。 這可讓使用者指定在 Unicode 正規化期間傳遞至 LCMapString 函式的自訂旗標。
cbVarSegMac
在 grbit 參數中未指定JET_bitIndexTupleLimits值時,要儲存在索引中之每個資料行的最大長度,以位元組為單位。
指定此欄位的值為 0 (零) 相當於下列專案:
指定主要索引JET_cbPrimaryKeyMost。
指定次要索引的JET_cbSecondaryKeyMost。
ptuplelimits
如果grbit參數中指定了JET_bitIndexTupleLimits值,則為JET_TUPLELIMITS結構的指標。
ptuplelimits 是在 Windows Server 2003 中引進。
rgconditionalcolumn
JET_CONDITIONALCOLUMN結構的陣列選擇性參數,用來指定索引中的條件式資料行。
cConditionalColumn
rgconditionalcolumn陣列中的結構計數。
err
包含用來建立此索引的傳回碼。
cbKeyMost
指定索引中索引鍵允許的大小上限,以位元組為單位。 如果未在 grbit 參數中指定JET_bitIndexKeyMost,則會忽略此參數。 如果此參數設定為零,而且在 grbit 成員中指定JET_bitIndexKeyMost,則呼叫函式將會失敗並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 Vista 之前的 Windows 版本中,索引中只有第一個多重值索引鍵資料行會在索引中展開其值。 所有其他多重值和標記的資料行只會在其索引中展開其第一個值。
假設資料表中存在下列資料列, (資料行 Alpha 不是多重值,而 Beta、Gamma 和 Delta 資料行是多值) ,而且索引會建立為 「+Alpha\0+Beta\0+Gamma\0+Delta\0\0」:
Alpha |
Beta |
色差補正 |
差異 |
---|---|---|---|
1 |
ABC |
MNO |
VWX |
2 |
THE |
雨 |
IN |
將會儲存下列索引元組:
{1,ABC,MNO,VWX}
{1,GHI,MNO,VWX}
{1,JKL,MNO,VWX}
{2,THE,RAIN,IN}
請注意,{2,THE,SPAIN,IN} 不會儲存,即使第二個數據列中的 Alpha 資料行發生單一多重值也一樣。
從 Windows Vista 開始的 Windows 版本中,您可以藉由指定JET_bitIndexCrossProduct,在索引中展開所有多重值資料行。
規格需求
需求 | 值 |
---|---|
用戶端 |
需要 Windows Vista、Windows XP 或 Windows 2000 Professional。 |
Server |
需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。 |
標頭 |
在 Esent.h 中宣告。 |
Unicode |
實作為JET_ INDEXCREATE2_W (Unicode ) 和 JET_ INDEXCREATE2_A (ANSI) 。 |
另請參閱
JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate