ALTER INDEX

ALTER INDEX は索引(インデックス)を再構築したり、索引の名前を変更したり、索引を使用禁止にするSQL文である。

Oracle

索引を再構築する

テーブルに行を挿入したり、削除したりを繰り返すと、インデックスが断片化を起こす。インデックスの断片化により、問い合わせの速度が遅くなってくる。これを解消するには、インデックスの再構築を行う。

ALTER INDEX [schema.]name REBUILD
schema
スキーマの名前

スキーマ名の指定を省略した場合は、自分のスキーマが対象となる。

SQL> ALTER INDEX tsuka.example REBUILD;
name
索引の名前

索引の名前を変更する

ALTER INDEX [schema.]name RENAME TO new_name
schema
スキーマの名前

スキーマ名の指定を省略した場合は、自分のスキーマが対象となる。

SQL> ALTER INDEX tsuka.example RENAME TO example2;
name
変更前の索引名
new_name
変更後の索引名
SQL> ALTER INDEX example RENAME TO example2;

索引を使用禁止にする

ALTER INDEX [schema.]name UNUSABLE
schema
スキーマの名前

スキーマ名の指定を省略した場合は、自分のスキーマが対象となる。

SQL> ALTER INDEX tsuka.example UNUSABLE;
name
索引の名前
SQL> ALTER INDEX example UNUSABLE;

必要な権限

自分のスキーマ内にあるインデックスを再構築するには、とくに権限は必要ない。

他のスキーマ内にあるインデックスを再構築するには、ALTER ANY INDEXシステム権限が必要である。

MySQL

MySQLにALTER INDEX文は存在しない。

Postgres

PostgreSQLでインデックスの名前を変更する。

ALTER INDEX name RENAME TO new_name

SQL Server

ALTER INDEX { index_name | ALL } ON object REORGANIZE
  [ PARTITION = partition_number ]
  [ WITH ( reorganize_option ) ]
ALTER INDEX { index_name | ALL } ON object SET (set_index_option[ ,...n ])
ALTER INDEX { index_name | ALL } ON object RESUME [ WITH ( resumable_index_options, [...n] ) ]
ALTER INDEX { index_name | ALL } ON object PAUSE
ALTER INDEX { index_name | ALL } ON object ABORT

索引を再構築する

ALTER INDEX { index_name | ALL } ON object REBUILD
  [ PARTITION = ALL ]
  [ WITH ( rebuild_index_option) [ ,...n ] ]
ALTER INDEX { index_name | ALL } ON object REBUILD
  [ PARTITION = partition_number ]
  [ WITH ( single_partition_rebuild_index_option ) [ ,...n ] ]

索引を無効にする

ALTER INDEX { index_name | ALL } ON object DISABLE

関連SQL

CREATE INDEX
索引を作成する。
DROP INDEX
索引を削除する。

参考文献

Microsoft 2023. ALTER INDEX (Transact-SQL) - SQL Server