MySQL 64
Oracle 無制限
PostgreSQL 無制限
SQL Server 999
(8.0.32)
https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html
64 secondary indexes
1017カラムのテーブルを作成
: > a.sql
for i in $(seq 1 65); do
echo "create index ind1_${i} on tab1(col${i});" >> a.sql
done >> a.sql
source a.sql
ERROR 1069 (42000): Too many keys specified; max 64 keys allowed
(19c)
無制限
1000カラムのテーブルを作成
: > a.sql
for i in $(seq 1 1000); do
for j in $(seq 1 1000); do
if [ ${i} -ne ${j} ]; then
echo "create index ind1_${i}_${j} on tab1(col${i},col${j});" >> a.sql
fi
done
done >> a.sql
@a.sql
select count(*) from user_indexes where index_name like 'IND1\_%' escape '\';
約1時間で11513のインデックス作成確認
(15)
https://www.postgresql.jp/document/14/html/limits.html
無制限
1600カラムのテーブルを作成
: > a.sql
for i in $(seq 1 1600); do
for j in $(seq 1 1600); do
if [ ${i} -ne ${j} ]; then
echo "create index ind1_${i}_${j} on tab1(col${i},col${j});" >> a.sql
fi
done
done >> a.sql
\i a.sql
select count(*) from pg_index
where indrelid = 'tab1'::regclass
;
約1時間で2558400のインデックス作成確認
(2022)
テーブルごとの非クラスター化インデックス数 = 999
1024カラムのテーブルを作成
: > a.sql
for i in $(seq 1 1000); do
echo "create index ind1_${i} on tab1(col${i});" >> a.sql
done >> a.sql
sqlcmd -U sa -S 192.168.137.62 -d test -b -i a.sql
非クラスター化インデックス 'ind1_1000' を作成できませんでした。テーブルまたはビ ューごとに許可されている最大数 999 を超えています。