H2 で次のテーブルを作成します。
CREATE TABLE TEST
(ID BIGINT NOT NULL PRIMARY KEY)
次に、INFORMATION_SCHEMA.TABLES テーブルを調べます。
SELECT SQL
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'TEST'
結果:
CREATE CACHED TABLE TEST(
ID BIGINT NOT NULL
)
次に、INFORMATION_SCHEMA.CONSTRAINTS テーブルを調べます。
SELECT SQL
FROM INFORMATION_SCHEMA.CONSTRAINTS
WHERE TABLE_NAME = 'TEST'
結果:
ALTER TABLE TEST
ADD CONSTRAINT CONSTRAINT_4C
PRIMARY KEY(ID)
INDEX PRIMARY_KEY_4C
これらのステートメントは私が述べたものではありません。したがって、質問は次のとおりです。TABLES と CONSTRAINS の情報は、データベースで実行された実際の SQL をどのように反映していますか?
- 元の CREATE TABLE ステートメントには、CACHEDという単語はありませんでした。(問題ない)
- ALTER TABLE .. ADD CONSTRAINTステートメントを実行したことがありません。
私が質問をしている実際の理由は、主キーがクラスター化インデックスで使用されることを保証するためにどのステートメントを実行すればよいかわからないためです。私の以前の質問H2 database: clustered index supportを見ると、Thomas Mueller の回答に次のステートメントが見つかるかもしれません。
テーブルの作成後に主キーが作成された場合、主キーは新しいインデックス B ツリーに格納されます。
したがって、INFORMATION_SCHEMA に示されているようにステートメントを実行すると、テーブルの作成後に主キーが作成されるため、ID はクラスター化インデックスで (基本的にデータ B ツリーのキーとして) 使用されません。
H2 のクラスター化インデックスで主キーが使用されていることを保証する方法はありますか?