インデックステーブルは、一意インデックスと非一意インデックスに分類されます。一意インデックスは、テーブル内のインデックス列に完全に同じ値を持つ行が存在しないことを保証しますが、非一意インデックスでは完全に同じ値が存在する可能性があります。OceanBaseデータベースでは、NULL値もインデックスに格納されます。
ストレージキー
非一意インデックス
非一意インデックスの場合、インデックステーブルのストレージキーはユーザーが指定した インデックス列 + メインテーブルの主キー列 です。
一意インデックス列
一意インデックス列の場合、インデックステーブルのストレージキーはユーザーが指定した インデックス列 + 変動するメインテーブルの主キー列 です。ここでの「変動する」とは、主キー列の値がインデックス列の値に応じて異なることを意味します。
- インデックス列 が NULL 以外の場合、変動するメインテーブルの主キー列 は機能せず、インデックス列 の値が使用されます。
- インデックス列 が NULL の場合、変動するメインテーブルの主キー列 は メインテーブルの主キー列 と同じ値に設定され、一意インデックステーブル上の複数の NULL を区別するために使用されます。
例:
非一意インデックステーブル
idx1_tbl1のストレージキーはcol2とcol1です。一意インデックステーブル
idx2_tbl1のストレージキーは次のとおりです:- インデックス列
col3がNULLの場合、変動するcol1列の値はメインテーブルcol1列の値となり、ストレージキーはcol1です。 - インデックス列
col3が NULL 以外の場合、変動するcol1列の値はNULLとなり機能せず、ストレージキーはcol3です。
- インデックス列
テーブル
tbl1を作成します。CREATE TABLE tbl1(col1 INT, col2 INT, col3 INT, col4 INT, PRIMARY KEY(col1));非一意インデックス
idx1_tbl1を作成します。CREATE INDEX idx1_tbl1 ON tbl1(col2);一意インデックス
idx2_tbl1を作成します。CREATE UNIQUE INDEX idx2_tbl1 ON tbl1(col3);