Struktur JET_INDEXCREATE

Berlaku untuk: Windows | Windows Server

Struktur JET_INDEXCREATE berisi informasi yang diperlukan untuk membuat indeks melalui data dalam database Extensible Storage Engine (ESE). Struktur digunakan oleh fungsi seperti JetCreateIndex2, dan dalam struktur seperti JET_TABLECREATE dan 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;

Anggota

cbStruct

Ukuran, dalam byte, dari struktur ini. Atur anggota ini ke sizeof( JET_INDEXCREATE ).

szIndexName

Nama indeks yang akan dibuat.

Nama indeks harus memenuhi kondisi berikut:

  • Ini harus kurang dari JET_cbNameMost, tidak termasuk null yang mengakhiri.

  • Ini harus terdiri dari karakter berikut: 0 (nol) hingga 9, A hingga Z, a sampai z, dan semua tanda baca lainnya kecuali untuk "!" (tanda seru), "," (koma), "[" (kurung buka), dan "]" (tanda kurung tutup) — yaitu, karakter ASCII 0x20, 0x22 melalui 0x2d, 0x2f melalui 0x5a, 0x5c, 0x5d melalui 0x7f.

  • Ini tidak boleh dimulai dengan spasi.

  • Ini harus terdiri dari setidaknya satu karakter non-spasi.

szKey

Penunjuk ke string token yang dihentikan null ganda dari token yang dibatasi null.

Setiap token berbentuk "<direction-specifier><column-name>", di mana spesifikasi arah adalah "+" atau "-". Misalnya, szKey dari "+abc\0-def\0+ghi\0" akan mengindeks tiga kolom "abc" (dalam urutan naik), "def" (dalam urutan menurun), dan "ghi" (dalam urutan naik). Dalam bahasa C, literal string memiliki terminator NULL tersirat; oleh karena itu, string di atas akan dihentikan oleh DOUBLE-NULL.

Jumlah kolom yang ditentukan dalam szKey mungkin tidak melebihi nilai JET_ccolKeyMost (konstanta dependen versi).

Setidaknya satu kolom harus diberi nama dalam szKey.

Perilaku usang: Setelah terminator DOUBLE-NULL, dimungkinkan untuk menentukan ID bahasa (WORD yang diteruskan ke MAKELCID( langid, SORT_DEFAULT ) ) sebagai cara untuk menentukan LCID untuk indeks. Adalah ilegal untuk menentukan ID bahasa di szKey dan LCID di JET_UNICODEINDEX (dengan mengatur JET_bitIndexUnicode dalam grbit).

Tidak digunakan lagi: Setelah ID bahasa, dimungkinkan untuk meneruskan cbVarSegMac sebagai USHORT. Perilaku tidak terdefinisi jika USHORT diatur baik di szKey maupun jika cbVarSegMac diatur dalam struktur.

cbKey

Panjangnya, dalam byte, dari szKey termasuk dua null yang mengakhiri.

grbit

Sekelompok bit yang menyertakan nol atau beberapa nilai yang tercantum dalam tabel berikut ini.

Nilai

Makna

JET_bitIndexUnique

Entri indeks duplikat (kunci) tidak diperbolehkan. Ini diberlakukan ketika JetUpdate dipanggil, bukan ketika JetSetColumn dipanggil.

JET_bitIndexPrimary

Indeks adalah indeks primer (berkluster). Setiap tabel harus memiliki tepat satu indeks utama. Jika tidak ada indeks utama yang secara eksplisit didefinisikan melalui tabel, mesin database akan membuat indeks utamanya sendiri.

JET_bitIndexDisallowNull

Tidak ada kolom di mana indeks dibuat dapat berisi nilai NULL .

JET_bitIndexIgnoreNull

Jangan tambahkan entri indeks untuk baris jika semua kolom yang diindeks adalah NULL.

JET_bitIndexIgnoreAnyNull

Jangan tambahkan entri indeks untuk baris jika salah satu kolom yang diindeks adalah NULL.

JET_bitIndexIgnoreFirstNull

Jangan tambahkan entri indeks untuk baris jika kolom pertama yang diindeks adalah NULL.

JET_bitIndexLazyFlush

Operasi indeks akan dicatat dengan malas.

JET_bitIndexLazyFlush tidak memengaruhi kemalasan pembaruan data. Jika operasi pengindeksan terganggu oleh penghentian proses, Soft Recovery masih dapat membuat database ke keadaan konsisten, tetapi indeks mungkin tidak ada.

JET_bitIndexEmpty

Jangan mencoba membangun indeks, karena semua entri akan mengevaluasi ke NULL. grbit juga harus menentukan JET_bitIgnoreAnyNull saat JET_bitIndexEmpty dilewati. Ini adalah peningkatan performa. Misalnya, jika kolom baru ditambahkan ke tabel, indeks dibuat di atas kolom yang baru ditambahkan ini, dan semua rekaman dalam tabel dipindai meskipun tidak ditambahkan ke indeks. Menentukan JET_bitIndexEmpty melewati pemindaian tabel, yang berpotensi memakan waktu lama.

JET_bitIndexUnversioned

Menyebabkan pembuatan indeks terlihat oleh transaksi lain. Biasanya sesi dalam transaksi tidak akan dapat melihat operasi pembuatan indeks di sesi lain. Bendera ini dapat berguna jika transaksi lain cenderung membuat indeks yang sama. Pembuatan indeks kedua akan gagal alih-alih berpotensi menyebabkan banyak operasi database yang tidak perlu. Transaksi kedua mungkin tidak dapat segera menggunakan indeks. Operasi pembuatan indeks harus diselesaikan sebelum dapat digunakan. Sesi saat ini tidak boleh dalam transaksi untuk membuat indeks tanpa informasi versi.

JET_bitIndexSortNullsHigh

Menentukan bendera ini menyebabkan nilai NULL diurutkan setelah data untuk semua kolom dalam indeks.

JET_bitIndexUnicode

Menentukan bendera ini memengaruhi interpretasi bidang union lcid/pidxunicde dalam struktur. Mengatur bit berarti bahwa bidang pidxunicode benar-benar menunjuk ke struktur JET_UNICODEINDEX . JET_bitIndexUnicode tidak diperlukan untuk mengindeks data Unicode. Ini hanya digunakan untuk menyesuaikan normalisasi data Unicode.

JET_bitIndexTuples

Menentukan bahwa indeks adalah indeks tuple. Lihat JET_TUPLELIMITS untuk deskripsi indeks tuple.

JET_bitIndexTuples diperkenalkan dalam sistem operasi Windows XP.

JET_bitIndexTupleLimits

Menentukan bendera ini memengaruhi interpretasi bidang union cbVarSegMac/ptuplelimits dalam struktur. Mengatur bit ini berarti bahwa bidang ptuplelimits benar-benar menunjuk ke struktur JET_TUPLELIMITS untuk memungkinkan batas indeks tuple kustom (menyiratkan JET_bitIndexTuples).

JET_bitIndexTupleLimits diperkenalkan dalam sistem operasi Windows Server 2003.

JET_bitIndexCrossProduct 0x00004000

Menentukan bendera ini untuk indeks yang memiliki lebih dari satu kolom kunci yang merupakan kolom multinilai akan mengakibatkan entri indeks dibuat untuk setiap hasil produk silang dari semua nilai di kolom kunci tersebut. Jika tidak, indeks hanya akan memiliki satu entri untuk setiap multinilai di kolom kunci paling signifikan yang merupakan kolom multinilai dan masing-masing entri indeks tersebut akan menggunakan multinilai pertama dari kolom kunci lain yang merupakan kolom multinilai.

Misalnya, jika Anda menentukan bendera ini untuk indeks di atas kolom A yang memiliki nilai "merah" dan "biru" dan di atas kolom B yang memiliki nilai "1" dan "2" maka entri indeks berikut akan dibuat: "merah", "1"; "merah", "2"; "biru", "1"; "biru", "2". Jika tidak, entri indeks berikut akan dibuat: "merah", "1"; "biru", "1".

JET_bitIndexCrossProduct diperkenalkan dalam sistem operasi Windows Vista.

JET_bitIndexKeyMost 0x00008000

Menentukan bendera ini akan menyebabkan indeks menggunakan ukuran kunci maksimum yang ditentukan dalam bidang cbKeyMost dalam struktur. Jika tidak, indeks akan menggunakan JET_cbKeyMost (255) sebagai ukuran kunci maksimumnya.

JET_bitIndexKeyMost diperkenalkan di Windows Vista.

JET_bitIndexDisallowTruncation 0x00010000

Menentukan bendera ini akan menyebabkan pembaruan apa pun pada indeks yang akan mengakibatkan kunci terpotok gagal dengan JET_errKeyTruncated. Jika tidak, kunci akan dihentikan secara diam-diam. Untuk informasi selengkapnya tentang pemotongan kunci, lihat fungsi JetMakeKey .

Windows Vista: JET_bitIndexDisallowTruncation diperkenalkan di Windows Vista.

JET_bitIndexNestedTable 0x00020000

Menentukan bendera ini akan menyebabkan pembaruan indeks di beberapa kolom multinilai tetapi hanya dengan nilai itagSequence yang sama.

JET_bitIndexNestedTable diperkenalkan di Windows Vista.

ulDensity

Persentase kepadatan pohon B+ indeks awal. Menentukan angka kurang dari 100 menggunakan lebih banyak ruang untuk membuat indeks pada awalnya, tetapi memungkinkan pertumbuhan indeks di masa mendatang untuk diberlakukan, sehingga menghindari fragmentasi internal.

Icid

Pengidentifikasi lokal (LCID) yang akan digunakan saat menormalkan data ketika nilai JET_bitIndexUnicode tidak ditentukan dalam parameter grbit . LCID memengaruhi normalisasi jika indeks melebihi kolom Unicode.

pidxunicode

Penunjuk ke struktur JET_UNICODEINDEX jika nilai JET_bitIndexUnicode ditentukan dalam parameter grbit . Ini memungkinkan pengguna untuk menentukan bendera kustom yang diteruskan ke fungsi LCMapString selama normalisasi Unicode.

cbVarSegMac

Panjang maksimum, dalam byte, dari setiap kolom untuk disimpan dalam indeks ketika nilai JET_bitIndexTupleLimits tidak ditentukan dalam parameter grbit .

Menentukan nilai 0 (nol) untuk bidang ini setara dengan:

  • Menentukan JET_cbPrimaryKeyMost untuk indeks utama.

  • Menentukan JET_cbSecondaryKeyMost untuk indeks sekunder.

ptuplelimits

Penunjuk ke struktur JET_TUPLELIMITS jika nilai JET_bitIndexTupleLimits ditentukan dalam parameter grbit .

ptuplelimits diperkenalkan di Windows Server 2003.

rgconditionalcolumn

Parameter opsional ke array struktur JET_CONDITIONALCOLUMN , yang digunakan untuk menentukan kolom bersyarah dalam indeks.

cConditionalColumn

Jumlah struktur dalam array rgconditionalcolumn .

Err

Berisi kode pengembalian untuk membuat indeks ini.

cbKeyMost

Menentukan ukuran maksimum yang diizinkan, dalam byte, untuk kunci dalam indeks. Parameter ini diabaikan jika nilai JET_bitIndexKeyMost tidak ditentukan dalam parameter grbit . Jika parameter ini diatur ke nol, dan JET_bitIndexKeyMost ditentukan dalam parameter grbit , fungsi panggilan akan gagal dengan JET_err_InvalidDef.

Ukuran kunci maksimum minimum yang didukung adalah JET_cbKeyMostMin (255), yang merupakan ukuran kunci maksimum warisan.

Ukuran kunci maksimum tergantung pada ukuran halaman database (JET_paramDatabasePageSize), sebagai berikut:

  • Jika JET_paramDatabasePageSize = 2048 maka JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost2KBytePage (500)

  • Jika JET_paramDatabasePageSize = 4096 maka JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost4KBytePage (1000)

  • Jika JET_paramDatabasePageSize = 8192 maka JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost8KBytePage (2000)

Ukuran kunci maksimum yang didukung untuk instans juga dapat dibaca dari parameter sistem JET_paramKeyMost.

cbKeyMost diperkenalkan di Windows Vista.

Keterangan

ESE mendukung pengindeksan atas kolom kunci yang berisi beberapa nilai. Untuk menggunakan fitur ini, kolom harus berupa jenis kolom yang diberi tag (JET_bitColumnTagged), dan harus ditandai agar beberapa nilainya diindeks dengan JET_bitColumnMultiValued. Dalam versi Windows yang lebih lama dari Windows Vista, hanya kolom kunci multinilai pertama dalam indeks yang akan meluaskan nilainya dalam indeks. Semua kolom multinilai dan ditandai lainnya hanya akan memiliki nilai pertamanya yang diperluas dalam indeks.

Dengan asumsi baris berikut ada dalam tabel (kolom Alpha tidak multinilai, sementara kolom Beta, Gamma, dan Delta multinilai), dan indeks dibuat sebagai "+Alpha\0+Beta\0+Gamma\0+Delta\0\0":

Alpha

Beta

Gama

Delta

1

ABC
GHI
JKL

MNO
PQR
STU

VWX
YZ

2

TJE

HUJAN
SPANYOL

IN
FALLS

Tuple indeks yang jatuh akan disimpan:

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

Perhatikan bahwa {2,THE,SPAIN,IN} tidak disimpan, meskipun kolom Alfa di baris kedua kebetulan memiliki satu multinilai.

Dalam versi Windows yang dimulai dengan Windows Vista, semua kolom multinilai dapat diperluas dalam indeks dengan menentukan JET_bitIndexCrossProduct.

Persyaratan

Persyaratan Nilai

Klien

Memerlukan Windows Vista, Windows XP, atau Windows 2000 Professional.

Server

Memerlukan Windows Server 2008, Windows Server 2003, atau Windows 2000 Server.

Header

Dinyatakan dalam Esent.h.

Unicode

Diimplementasikan sebagai JET_ INDEXCREATE_W (Unicode) dan JET_ INDEXCREATE_A (ANSI).

Lihat juga

JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate