次の方法で共有


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

作成するインデックスの名前。

名前は次の条件を満たしている必要があります。

  • 終端の null は含めず、JET_cbNameMost未満にする必要があります。

  • 0 ~ 9、A ~ Z、a ~ z、および "!" を除く他のすべての句読点は、次の文字セットで構成する必要があります。(感嘆符)、"、" (コンマ)、"[" (始め角かっこ)、および "]" (右角かっこ) — つまり、ASCII 文字0x20、0x2d 0x22、0x5a、0x5c、0x5dから 0x7f まで0x2f。

  • スペースで始めてはなりません。

  • 少なくとも 1 つの非スペース文字を含む必要があります。

szKey

null で区切られたトークンの二重 null で終わる文字列へのポインター。

各トークンは "<direction-specifier><column-name>" という形式で、direction-specification は "+" または "-" です。 たとえば、"+abc\0-def\0+ghi\0" の szKey では、3 つの列 "abc" (昇順)、"def" (降順)、"ghi" (昇順) のインデックスが作成されます。 C 言語では、文字列リテラルには暗黙的な NULL 終端記号があるため、上記の文字列は double-NULL で終了します。

szKey で指定する列の数は、JET_ccolKeyMost (バージョンに依存する定数) を超えることはできません。

szKey では、少なくとも 1 つの列に名前を付ける必要があります。

古い動作: double-NULL 終端記号の後に、インデックスの LCID を指定する方法として、言語 ID (MAKELCID( langid, SORT_DEFAULT ) に渡される WORD) を指定できます。 szKey の言語 ID と JET_UNICODEINDEX の LCID の両方を指定することは無効です (grbit で JET_bitIndexUnicode を設定します)。

非推奨: 言語 ID の後に、 cbVarSegMacUSHORT データ型として渡すことができます。 USHORT が szKey で設定されている場合と、 構造体に cbVarSegMac が設定されている場合、動作は未定義です。

cbKey

2 つの終端の null を含む szKey の長さ (バイト単位)。

grbit

次の表に示す 0 個以上の値オプションを含むビットのグループ。

説明

JET_bitIndexUnique

重複するインデックス エントリ (キー) は許可されません。 これは、JetSetColumn が呼び出されたときではなく、JetUpdate が呼び出されたときに適用されます。

JET_bitIndexPrimary

インデックスはプライマリ (クラスター化) インデックスです。 すべてのテーブルには、1 つのプライマリ インデックスが必要です。 テーブルに対してプライマリ インデックスが明示的に定義されていない場合、データベース エンジンは独自のプライマリ インデックスを作成します。

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すると、インデックスの作成が他のトランザクションに表示されます。 通常、トランザクション内のセッションでは、別のセッションでインデックス作成操作を確認できません。 このフラグは、別のトランザクションで同じインデックスが作成される可能性がある場合に便利です。 2 番目のインデックス作成は、多くの不要なデータベース操作を引き起こす可能性があるのではなく、単に失敗します。 2 番目のトランザクションでは、インデックスをすぐに使用できない場合があります。 インデックスの作成操作は、使用できるようになる前に完了する必要があります。 バージョン情報のないインデックスを作成するために、セッションがトランザクション内に存在してはなりません。

JET_bitIndexSortNullsHigh

このフラグを指定すると、インデックス内のすべての列のデータの後に NULL 値が並べ替えられます。

JET_bitIndexUnicode

このフラグを指定すると、構造体内の lcid/pidxunicde 共用体フィールドの解釈に影響します。 ビットを設定すると、pidxunicode フィールドは実際には JET_UNICODEINDEX 構造体を指します。 Unicode データのインデックスを作成するためにJET_bitIndexUnicodeは必要ありません。 Unicode データの正規化をカスタマイズするだけで済みます。

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

複数値の列である複数のキー列を持つインデックスに対してこのフラグを指定すると、これらのキー列内のすべての値のクロス積の結果ごとにインデックス エントリが作成されます。 それ以外の場合、インデックスは、複数値列である最も重要なキー列の複数値ごとに 1 つのエントリのみを持ち、これらの各インデックス エントリは、複数値列である他のキー列の最初の複数値を使用します。

たとえば、値が "1" と "2" の列 B の値が "red" および "blue" の列 A のインデックスに対してこのフラグを指定した場合、"red"、"1" のインデックス エントリが作成されます。"red", "2";"blue", "1";"blue"、"2" それ以外の場合は、次のインデックス エントリが作成されます: "red"、"1"。"blue"、"1"

JET_bitIndexCrossProduct値は Windows Vista で導入されました。

JET_bitIndexKeyMost
0x00008000

このフラグを指定すると、インデックスは 構造体の cbKeyMost フィールドで指定された最大キー サイズを使用します。 それ以外の場合、インデックスは最大キー サイズとして JET_cbKeyMost (255) を使用します。

JET_bitIndexKeyMost値は Windows Vista で導入されました。

JET_bitIndexDisallowTruncation
0x00010000

このフラグを指定すると、インデックスを更新すると、JET_errKeyTruncated応答コードで切り捨てられたキーが失敗します。 それ以外の場合、キーは自動的に切り捨てられます。 キーの切り捨ての詳細については、「 JetMakeKey」を参照してください。

JET_bitIndexDisallowTruncation値は Windows Vista で導入されました。

ulDensity

初期インデックス B+ ツリーのパーセンテージ密度。 100 未満の数値を指定すると、最初はインデックスを作成するためにより多くの領域が使用されますが、インデックスの将来の拡張が可能になり、内部の断片化が回避されます。

lcid

grbit パラメーターにJET_bitIndexUnicode値が指定されていない場合にデータを正規化するときに使用するロケール識別子 (LCID)。 インデックスが 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が指定されていない場合、このパラメーターは無視されます。 このパラメーターが 0 に設定され、 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" として作成されます。

[アルファ]

ベータ

Gamma

差分

1

ABC
GHI
JKL

MNO
Pqr
ステュー

VWX
Yz

2

THE


スペイン

IN

次のインデックスタプルが格納されます。

{1,ABC,MNO,VWX}
{1,GHI,MNO,VWX}
{1,JKL,MNO,VWX}
{2,THE,RAIN,IN}

2 行目の Alpha 列の複数値が 1 つであっても、{2,THE,SPAIN,IN} は格納されないことに注意してください。

Windows Vista 以降のバージョンの Windows では、複数値を持つすべての列をインデックスで展開するには、JET_bitIndexCrossProductを指定します。

要件

要件

Client

Windows Vista、Windows XP、または Windows 2000 Professional が必要です。

[サーバー]

Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。

Header

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