インデックスサイズ上限確認

 

(8.0.24)


show variables like 'innodb_page_size';
show variables like '%char%';

drop table tab1;

create table tab1(
col1 varchar(100),
col2 varchar(100),
col3 varchar(100),
col4 varchar(100),
col5 varchar(100),
col6 varchar(100),
col7 varchar(100),
col8 varchar(100),
col9 varchar(100)
);

insert into tab1 values(
rpad('x',100,'x'),rpad('x',100,'x'),rpad('x',100,'x'),rpad('x',100,'x'),rpad('x',100,'x'),rpad('x',100,'x'),rpad('x',100,'x'),rpad('x',100,'x'),rpad('x',100,'x')
);


alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6,col7),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6,col7,col8),algorithm=inplace;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6,col7,col8,col9),algorithm=inplace;


create index ind11 on tab1(col1) algorithm=inplace;
create index ind12 on tab1(col1,col2) algorithm=inplace;
create index ind13 on tab1(col1,col2,col3) algorithm=inplace;
create index ind14 on tab1(col1,col2,col3,col4) algorithm=inplace;
create index ind15 on tab1(col1,col2,col3,col4,col5) algorithm=inplace;
create index ind16 on tab1(col1,col2,col3,col4,col5,col6) algorithm=inplace;
create index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7) algorithm=inplace;
create index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8) algorithm=inplace;
create index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9) algorithm=inplace;


alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6,col7),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6,col7,col8),algorithm=copy;
alter table tab1 drop primary key;
alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6,col7,col8,col9),algorithm=copy;


create index ind11 on tab1(col1) algorithm=copy;
create index ind12 on tab1(col1,col2) algorithm=copy;
create index ind13 on tab1(col1,col2,col3) algorithm=copy;
create index ind14 on tab1(col1,col2,col3,col4) algorithm=copy;
create index ind15 on tab1(col1,col2,col3,col4,col5) algorithm=copy;
create index ind16 on tab1(col1,col2,col3,col4,col5,col6) algorithm=copy;
create index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7) algorithm=copy;
create index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8) algorithm=copy;
create index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9) algorithm=copy;

 

-- 確認結果
(1)
ブロックサイズ 16k、データなし、algorithm=inplace
ブロックサイズ 16k、データなし、algorithm=copy
ブロックサイズ 16k、データあり、algorithm=inplace
ブロックサイズ 16k、データあり、algorithm=copy


alter table tab1 add constraint tab1pk primary key(col1,col2,col3,col4,col5,col6,col7,col8);
ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

create index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

(2)
ブロックサイズ 4k、データなし、algorithm=inplace
ブロックサイズ 4k、データなし、algorithm=inplace
ブロックサイズ 4k、データあり、algorithm=copy
ブロックサイズ 4k、データあり、algorithm=copy

alter table tab1 add constraint tab1pk primary key(col1,col2);
ERROR 1071 (42000): Specified key was too long; max key length is 768 bytes

create index ind12 on tab1(col1,col2);
ERROR 1071 (42000): Specified key was too long; max key length is 768 bytes

 

(19c)


show parameter db_block_size

drop table tab1 purge;

create table tab1(
col1 varchar2(1000),
col2 varchar2(1000),
col3 varchar2(1000),
col4 varchar2(1000),
col5 varchar2(1000),
col6 varchar2(1000),
col7 varchar2(1000),
col8 varchar2(1000),
col9 varchar2(1000)
);

insert into tab1 values(
rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x')
);
commit;

create unique index ind11 on tab1(col1) online;
create unique index ind12 on tab1(col1,col2) online;
create unique index ind13 on tab1(col1,col2,col3) online;
create unique index ind14 on tab1(col1,col2,col3,col4) online;
create unique index ind15 on tab1(col1,col2,col3,col4,col5) online;
create unique index ind16 on tab1(col1,col2,col3,col4,col5,col6) online;
create unique index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7) online;
create unique index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8) online;
create unique index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9) online;


create index ind11 on tab1(col1) online;
create index ind12 on tab1(col1,col2) online;
create index ind13 on tab1(col1,col2,col3) online;
create index ind14 on tab1(col1,col2,col3,col4) online;
create index ind15 on tab1(col1,col2,col3,col4,col5) online;
create index ind16 on tab1(col1,col2,col3,col4,col5,col6) online;
create index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7) online;
create index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8) online;
create index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9) online;


create unique index ind11 on tab1(col1);
create unique index ind12 on tab1(col1,col2);
create unique index ind13 on tab1(col1,col2,col3);
create unique index ind14 on tab1(col1,col2,col3,col4);
create unique index ind15 on tab1(col1,col2,col3,col4,col5);
create unique index ind16 on tab1(col1,col2,col3,col4,col5,col6);
create unique index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create unique index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create unique index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);


create index ind11 on tab1(col1);
create index ind12 on tab1(col1,col2);
create index ind13 on tab1(col1,col2,col3);
create index ind14 on tab1(col1,col2,col3,col4);
create index ind15 on tab1(col1,col2,col3,col4,col5);
create index ind16 on tab1(col1,col2,col3,col4,col5,col6);
create index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);

 

 


-- 確認結果
(1)
ブロックサイズ 8k、データなし、onlineあり
ブロックサイズ 8k、データなし、onlineなし
ブロックサイズ 8k、データあり、onlineなし

create unique index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7)
*
行1でエラーが発生しました。:
ORA-01450: キーが最大長(6398)を超えました

create index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7)
*
行1でエラーが発生しました。:
ORA-01450: キーが最大長(6398)を超えました

(2)
ブロックサイズ 8k、データあり、onlineあり ★

create unique index ind14 on tab1(col1,col2,col3,col4) online
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-01450:
キーが最大長(3215)を超えました

create index ind14 on tab1(col1,col2,col3,col4) online
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-01450:
キーが最大長(3215)を超えました

(3)
ブロックサイズ 4k、データなし、onlineあり
ブロックサイズ 4k、データなし、onlineなし
ブロックサイズ 4k、データあり、onlineなし

create unique index ind14 on tab1(col1,col2,col3,col4)
*
行1でエラーが発生しました。:
ORA-01450: キーが最大長(3118)を超えました

create index ind14 on tab1(col1,col2,col3,col4)
*
行1でエラーが発生しました。:
ORA-01450: キーが最大長(3118)を超えました

(4)
ブロックサイズ 4k、データあり、onlineあり ★

create unique index ind12 on tab1(col1,col2) online
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-01450:
キーが最大長(1575)を超えました

create index ind12 on tab1(col1,col2) online
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-01450:
キーが最大長(1575)を超えました

(13)


show block_size;

drop table tab1;

create table tab1(
col1 varchar(1000),
col2 varchar(1000),
col3 varchar(1000),
col4 varchar(1000),
col5 varchar(1000),
col6 varchar(1000),
col7 varchar(1000),
col8 varchar(1000),
col9 varchar(1000)
);


insert into tab1 values(
rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x'),rpad('x',1000,'x')
);

create unique index concurrently ind11 on tab1(col1);
create unique index concurrently ind12 on tab1(col1,col2);
create unique index concurrently ind13 on tab1(col1,col2,col3);
create unique index concurrently ind14 on tab1(col1,col2,col3,col4);
create unique index concurrently ind15 on tab1(col1,col2,col3,col4,col5);
create unique index concurrently ind16 on tab1(col1,col2,col3,col4,col5,col6);
create unique index concurrently ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create unique index concurrently ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create unique index concurrently ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);


create index concurrently ind11 on tab1(col1);
create index concurrently ind12 on tab1(col1,col2);
create index concurrently ind13 on tab1(col1,col2,col3);
create index concurrently ind14 on tab1(col1,col2,col3,col4);
create index concurrently ind15 on tab1(col1,col2,col3,col4,col5);
create index concurrently ind16 on tab1(col1,col2,col3,col4,col5,col6);
create index concurrently ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create index concurrently ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create index concurrently ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);

create unique index ind11 on tab1(col1);
create unique index ind12 on tab1(col1,col2);
create unique index ind13 on tab1(col1,col2,col3);
create unique index ind14 on tab1(col1,col2,col3,col4);
create unique index ind15 on tab1(col1,col2,col3,col4,col5);
create unique index ind16 on tab1(col1,col2,col3,col4,col5,col6);
create unique index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create unique index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create unique index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);


create index ind11 on tab1(col1);
create index ind12 on tab1(col1,col2);
create index ind13 on tab1(col1,col2,col3);
create index ind14 on tab1(col1,col2,col3,col4);
create index ind15 on tab1(col1,col2,col3,col4,col5);
create index ind16 on tab1(col1,col2,col3,col4,col5,col6);
create index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);

 


-- 確認結果
(1)
ブロックサイズ 8k、データなし、concurrentlyあり
ブロックサイズ 8k、データなし、concurrentlyなし
ブロックサイズ 8k、データあり、concurrentlyあり
ブロックサイズ 8k、データあり、concurrentlyなし
ブロックサイズ 4k、データなし、concurrentlyあり
ブロックサイズ 4k、データなし、concurrentlyなし
ブロックサイズ 4k、データあり、concurrentlyあり
ブロックサイズ 4k、データあり、concurrentlyなし

上限不明

 

(2019)


drop table tab1;

create table tab1(
col1 varchar(1000) not null,
col2 varchar(1000) not null,
col3 varchar(1000) not null,
col4 varchar(1000) not null,
col5 varchar(1000) not null,
col6 varchar(1000) not null,
col7 varchar(1000) not null,
col8 varchar(1000) not null,
col9 varchar(1000) not null
);

insert into tab1 values(
replicate('x',10),replicate('x',10),replicate('x',10),replicate('x',10),replicate('x',10),replicate('x',10),replicate('x',10),replicate('x',10),replicate('x',10)
);

create unique clustered index ind11 on tab1(col1) with( online=on );
create unique clustered index ind12 on tab1(col1,col2) with( online=on );
create unique clustered index ind13 on tab1(col1,col2,col3) with( online=on );
create unique clustered index ind14 on tab1(col1,col2,col3,col4) with( online=on );
create unique clustered index ind15 on tab1(col1,col2,col3,col4,col5) with( online=on );
create unique clustered index ind16 on tab1(col1,col2,col3,col4,col5,col6) with( online=on );
create unique clustered index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7) with( online=on );
create unique clustered index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8) with( online=on );
create unique clustered index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9) with( online=on );


create nonclustered index ind11 on tab1(col1) with( online=on );
create nonclustered index ind12 on tab1(col1,col2) with( online=on );
create nonclustered index ind13 on tab1(col1,col2,col3) with( online=on );
create nonclustered index ind14 on tab1(col1,col2,col3,col4) with( online=on );
create nonclustered index ind15 on tab1(col1,col2,col3,col4,col5) with( online=on );
create nonclustered index ind16 on tab1(col1,col2,col3,col4,col5,col6) with( online=on );
create nonclustered index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7) with( online=on );
create nonclustered index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8) with( online=on );
create nonclustered index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9) with( online=on );


create unique clustered index ind11 on tab1(col1);
create unique clustered index ind12 on tab1(col1,col2);
create unique clustered index ind13 on tab1(col1,col2,col3);
create unique clustered index ind14 on tab1(col1,col2,col3,col4);
create unique clustered index ind15 on tab1(col1,col2,col3,col4,col5);
create unique clustered index ind16 on tab1(col1,col2,col3,col4,col5,col6);
create unique clustered index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create unique clustered index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create unique clustered index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);


create nonclustered index ind11 on tab1(col1);
create nonclustered index ind12 on tab1(col1,col2);
create nonclustered index ind13 on tab1(col1,col2,col3);
create nonclustered index ind14 on tab1(col1,col2,col3,col4);
create nonclustered index ind15 on tab1(col1,col2,col3,col4,col5);
create nonclustered index ind16 on tab1(col1,col2,col3,col4,col5,col6);
create nonclustered index ind17 on tab1(col1,col2,col3,col4,col5,col6,col7);
create nonclustered index ind18 on tab1(col1,col2,col3,col4,col5,col6,col7,col8);
create nonclustered index ind19 on tab1(col1,col2,col3,col4,col5,col6,col7,col8,col9);


insert into tab1 values(
replicate('x',900),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000)
);
insert into tab1 values(
replicate('x',901),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000)
);

insert into tab1 values(
replicate('x',1000),replicate('x',700),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000)
);
insert into tab1 values(
replicate('x',1000),replicate('x',701),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000),replicate('x',1000)
);

 

-- 確認結果
(1)
データなし、onlineあり
データなし、onlineなし
データあり、onlineあり
データあり、onlineなし

警告: クラスター化 インデックスの最大キー長は 900 バイトです。インデックス 'ind11' の最大長は 1000 バイトです。大きな値の組み合わせの一部では挿入操作または更新操作が失敗します。

警告: 非クラスター化 インデックスの最大キー長は 1700 バイトです。インデックス 'ind12' の最大長は 2000 バイトです。大きな値の組み合わせの一部では挿入操作または更新操作が失敗します。

警告: 行の最大長が許容制限の 8060 バイトを超えています。一部の大きな値の組み合わせでは、挿入操作または更新操作が失敗します。