インデックステーブルは、唯一インデックスと非唯一インデックスに分類されます。唯一インデックスは、テーブル内のインデックス列において、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);