共用方式為


JET_INDEXCREATE 結構

適用于: Windows |Windows Server

JET_INDEXCREATE結構包含在可延伸儲存引擎中建立索引所需的資訊, (ESE) 資料庫。 結構是由 JetCreateIndex2等函式使用,以及 JET_TABLECREATEJET_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 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。 當傳遞JET_bitIndexEmpty時,grbit也必須指定JET_bitIgnoreAnyNull。 這是效能增強功能。 例如,如果將新的資料行加入資料表,則會透過這個新加入的資料行建立索引,而且即使資料表中的所有記錄未加入索引,也會掃描這些記錄。 指定JET_bitIndexEmpty會略過資料表的掃描,這可能需要很長的時間。

JET_bitIndexUnversioned

讓其他交易可以看到索引建立。 一般而言,交易中的會話將無法在另一個會話中看到索引建立作業。 如果另一筆交易可能建立相同的索引,此旗標可能會很有用。 第二個索引建立將會失敗,而不會造成許多不必要的資料庫作業。 第二筆交易可能無法立即使用索引。 索引建立作業必須先完成,才能使用。 會話目前不得在交易中,以在沒有版本資訊的情況下建立索引。

JET_bitIndexSortNullsHigh

指定此旗標會導致 索引中所有資料行的資料之後排序 Null 值。

JET_bitIndexUnicode

指定此旗標會影響 結構中 lcid/pidxunicde 等位欄位的解譯。 設定位表示 pidxunicode 欄位實際上指向 JET_UNICODEINDEX 結構。 JET_bitIndexUnicode不需要索引 Unicode 資料。 它只會用來自訂 Unicode 資料的正規化。

JET_bitIndexTuples

指定索引是元組索引。 如需 Tuple 索引的描述,請參閱 JET_TUPLELIMITS

JET_bitIndexTuples是在 Windows XP 作業系統中引進。

JET_bitIndexTupleLimits

指定此旗標會影響結構中 cbVarSegMac/ptuplelimits 等位欄位的解譯。 設定此位表示 ptuplelimits 欄位實際上指向 JET_TUPLELIMITS 結構,以允許自訂 Tuple 索引限制 (表示JET_bitIndexTuples) 。

JET_bitIndexTupleLimits是在 Windows Server 2003 作業系統中引進。

JET_bitIndexCrossProduct 0x00004000

針對索引指定這個旗標,此索引具有一個以上的索引鍵資料行,該索引行是多重值資料行,將會產生針對這些索引鍵資料行中所有值之交叉乘積的每個結果建立索引項目。 否則,索引在最重要的索引鍵資料行中,每個多重值只會有一個專案,而且每個索引項目目都會使用來自任何其他多值資料行的第一個多重值。

例如,如果您針對具有值 「red」 和 「blue」 的資料行 A 指定此索引旗標,並在具有值 「1」 和 「2」 的資料行 B 上指定此旗標,則會建立下列索引項目目:「red」、「1」。「red」, 「2」;「blue」, 「1」;「blue」、「2」。 否則,將會建立下列索引項目目:「red」、「1」;「blue」、「1」。

JET_bitIndexCrossProduct是在 Windows Vista 作業系統中引進。

JET_bitIndexKeyMost 0x00008000

指定此旗標會導致索引使用結構中 cbKeyMost 欄位中所指定的索引鍵大小上限。 否則,索引會使用JET_cbKeyMost (255) 作為索引鍵大小上限。

windows Vista 中引進了JET_bitIndexKeyMost。

JET_bitIndexDisallowTruncation 0x00010000

指定此旗標會導致索引的任何更新導致截斷索引鍵失敗,並出現JET_errKeyTruncated。 否則,金鑰會以無訊息方式截斷。 如需金鑰截斷的詳細資訊,請參閱 JetMakeKey 函式。

Windows Vista:windows Vista 中引進JET_bitIndexDisallowTruncation。

JET_bitIndexNestedTable 0x00020000

指定此旗標會導致在多個多重值資料行上更新索引,但只有相同 itagSequence的值。

windows Vista 中引進了JET_bitIndexNestedTable。

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 中引進的。

備註

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
GHI
JKL

MNO
PQR
斯圖

VWX
YZ

2

THE


西班牙

IN
瀑布

將會儲存下降的索引-Tuple:

{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_ INDEXCREATE_W (Unicode ) 和 JET_ INDEXCREATE_A (ANSI) 。

另請參閱

JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate