最大インデックス数

 

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)

https://docs.oracle.com/cd/F19136_01/refrn/logical-database-limits.html#GUID-685230CF-63F5-4C5A-B8B0-037C566BDA76

無制限

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)

https://learn.microsoft.com/ja-jp/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-ver16

テーブルごとの非クラスター化インデックス数 = 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 を超えています。