インデックステーブルは、唯一インデックスと非唯一インデックスに分類されます。唯一インデックスは、テーブル内のインデックス列において、完全に同一の値を持つ2行が存在しないことを保証します。一方、非唯一インデックスでは、完全に同一の値が存在する可能性があります。OceanBaseデータベースでは、NULL値もインデックスに格納されます。
非唯一インデックスの場合、インデックステーブルのストレージキーはユーザーが指定したインデックス列と主テーブルの主キーです。唯一インデックス列の場合、インデックステーブルのストレージキーはユーザーが指定したインデックス列と変動する主テーブルの主キー列であり、ここで変動とは主キー列の値がインデックス列の値によって異なることを意味します。
以下の例のように、非唯一インデックステーブル i1 のストレージキーは c2 と c1 です。唯一インデックステーブル i2 のストレージキーは c3 であり、c1 は変動します。c3 が NULL の場合、変動する c1 列の値は主テーブル c1 列の値となります。c3 が NULL でない場合、変動する c1 列の値は NULL となります。
CREATE TABLE t1(c1 INT, c2 INT, c3 INT, c4 INT, PRIMARY KEY(c1));
CREATE INDEX i1 ON t1(c2);
CREATE UNIQUE INDEX i2 ON t1(c3);