不可視インデックスはMySQL 8.0の新機能で、インデックスに「利用できない」と印をつけこれをオプティマイザが利用するためのものです。つまりインデックスはメンテナンスされデータが更新されれば最新の状態に保たれますが、インデックスを利用してクエリーを発行することができません(FORCE INDEX インデックス名
クエリーだとしても、です)
不可視インデックスはMyISAMストレージエンジンが実装している無効化インデックス(disabled indexes)と混同してはなりません(無効化インデックスはインデックスのメンテナンスをやめます)。不可視インデックスには特筆すべき2つのユースケースがあります。
ALTER TABLE Country ALTER INDEX c INVISIBLE;
ALTER TABLE Country DROP INDEX c;
ALTER TABLE Country ADD INDEX c (Continent) INVISIBLE;
# after some time
ALTER TABLE Country ALTER INDEX c VISIBLE;
全てのインデックスは不可視であると指定されない限り、デフォルトで可視となります。全スキーマの不可視インデックスは次のようにして探すことができます。
SELECT * FROM information_schema.statistics WHERE is_visible='NO';
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: world
TABLE_NAME: Country
NON_UNIQUE: 1
INDEX_SCHEMA: world
INDEX_NAME: c
SEQ_IN_INDEX: 1
COLUMN_NAME: Continent
COLLATION: A
CARDINALITY: 7
SUB_PART: NULL
PACKED: NULL
NULLABLE:
INDEX_TYPE: BTREE
COMMENT: disabled
INDEX_COMMENT:
IS_VISIBLE: NO