このページは機械翻訳したものです。
次のテーブルに、FULLTEXT インデックスのメタデータを示します:
mysql> SHOW TABLES FROM INFORMATION_SCHEMA LIKE 'INNODB_FT%';
+-------------------------------------------+
| Tables_in_INFORMATION_SCHEMA (INNODB_FT%) |
+-------------------------------------------+
| INNODB_FT_CONFIG |
| INNODB_FT_BEING_DELETED |
| INNODB_FT_DELETED |
| INNODB_FT_DEFAULT_STOPWORD |
| INNODB_FT_INDEX_TABLE |
| INNODB_FT_INDEX_CACHE |
+-------------------------------------------+
テーブルの概要
INNODB_FT_CONFIG:InnoDBテーブルのFULLTEXTインデックスおよび関連する処理に関するメタデータを提供します。INNODB_FT_BEING_DELETED:INNODB_FT_DELETEDテーブルのスナップショットを提供します。これは、OPTIMIZE TABLEメンテナンス操作中にのみ使用されます。OPTIMIZE TABLEを実行すると、INNODB_FT_BEING_DELETEDテーブルが空になり、INNODB_FT_DELETEDテーブルからDOC_ID値が削除されます。INNODB_FT_BEING_DELETEDの内容は一般に有効期間が短いため、モニタリングやデバッグでのこのテーブルの有用性は限られます。FULLTEXTインデックスを持つテーブルでのOPTIMIZE TABLEの実行の詳細は、セクション12.10.6「MySQL の全文検索の微調整」を参照してください。INNODB_FT_DELETED:InnoDBテーブルのFULLTEXTインデックスから削除された行を格納します。InnoDBFULLTEXTインデックスに対する DML 操作中の高コストのインデックス再編成を回避するために、新しく削除された単語に関する情報は個別に格納され、テキスト検索の実行時に検索結果から除外され、InnoDBテーブルに対してOPTIMIZE TABLEステートメントを発行した場合にのみメイン検索インデックスから削除されます。-
INNODB_FT_DEFAULT_STOPWORD:InnoDBテーブルにFULLTEXTインデックスを作成するときにデフォルトで使用される stopwords のリストを保持します。INNODB_FT_DEFAULT_STOPWORDテーブルについては、セクション12.10.4「全文ストップワード」を参照してください。 INNODB_FT_INDEX_TABLE:InnoDBテーブルのFULLTEXTインデックスに対するテキスト検索の処理に使用される逆インデックスに関する情報を提供します。INNODB_FT_INDEX_CACHE:FULLTEXTインデックスに新しく挿入された行に関するトークン情報を提供します。 DML 操作中の高コストのインデックス再編成を回避するために、新しくインデックス付けされたワードに関する情報は個別に格納され、OPTIMIZE TABLEの実行時、サーバーの停止時、またはキャッシュサイズがinnodb_ft_cache_sizeまたはinnodb_ft_total_cache_sizeシステム変数で定義された制限を超えた場合にのみメイン検索インデックスと結合されます。
INNODB_FT_DEFAULT_STOPWORD テーブルを除き、これらのテーブルは最初は空です。 これらのいずれかをクエリーする前に、innodb_ft_aux_table システム変数の値を、FULLTEXT インデックスを含むテーブルの名前 (test/articles など) に設定します。
例 15.5 InnoDB FULLTEXT インデックスの INFORMATION_SCHEMA テーブル
この例では、FULLTEXT インデックスを含むテーブルを使用して、FULLTEXT インデックスの INFORMATION_SCHEMA テーブルに含まれているデータを示します。
-
FULLTEXTインデックスを含むテーブルを作成し、一部のデータを挿入します。mysql> CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body) ) ENGINE=InnoDB; mysql> INSERT INTO articles (title,body) VALUES ('MySQL Tutorial','DBMS stands for DataBase ...'), ('How To Use MySQL Well','After you went through a ...'), ('Optimizing MySQL','In this tutorial we show ...'), ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), ('MySQL vs. YourSQL','In the following database comparison ...'), ('MySQL Security','When configured properly, MySQL ...'); -
innodb_ft_aux_table変数をFULLTEXTインデックスを含むテーブルの名前に設定します。 この変数が設定されていない場合、INNODB_FT_DEFAULT_STOPWORDを除き、InnoDBFULLTEXTINFORMATION_SCHEMAテーブルは空です。mysql> SET GLOBAL innodb_ft_aux_table = 'test/articles'; -
INNODB_FT_INDEX_CACHEテーブルをクエリーします。これにより、FULLTEXTインデックス内の新しく挿入された行に関する情報が示されます。 DML 操作中の高コストのインデックス再編成を回避するために、新しく挿入された行のデータは、OPTIMIZE TABLEが実行されるまで (またはサーバーが停止するか、キャッシュ制限を超えるまで)、FULLTEXTインデックスキャッシュに残ります。mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE LIMIT 5; +------------+--------------+-------------+-----------+--------+----------+ | WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | +------------+--------------+-------------+-----------+--------+----------+ | 1001 | 5 | 5 | 1 | 5 | 0 | | after | 3 | 3 | 1 | 3 | 22 | | comparison | 6 | 6 | 1 | 6 | 44 | | configured | 7 | 7 | 1 | 7 | 20 | | database | 2 | 6 | 2 | 2 | 31 | +------------+--------------+-------------+-----------+--------+----------+ -
innodb_optimize_fulltext_onlyシステム変数を有効にし、FULLTEXTインデックスを含むテーブルでOPTIMIZE TABLEを実行します。 この操作により、FULLTEXTインデックスキャッシュの内容がメインのFULLTEXTインデックスにフラッシュされます。innodb_optimize_fulltext_onlyは、InnoDBテーブルでのOPTIMIZE TABLEステートメントの動作方法を変更するものであり、FULLTEXTインデックスを含むInnoDBテーブルでの保守操作中に一時的に有効にすることを目的にしています。mysql> SET GLOBAL innodb_optimize_fulltext_only=ON; mysql> OPTIMIZE TABLE articles; +---------------+----------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------------+----------+----------+----------+ | test.articles | optimize | status | OK | +---------------+----------+----------+----------+ -
INNODB_FT_INDEX_TABLEテーブルにクエリーして、メインのFULLTEXTインデックス内のデータに関する情報 (FULLTEXTインデックスキャッシュからフラッシュされたばかりのデータに関する情報を含む) を表示します。mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE LIMIT 5; +------------+--------------+-------------+-----------+--------+----------+ | WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | +------------+--------------+-------------+-----------+--------+----------+ | 1001 | 5 | 5 | 1 | 5 | 0 | | after | 3 | 3 | 1 | 3 | 22 | | comparison | 6 | 6 | 1 | 6 | 44 | | configured | 7 | 7 | 1 | 7 | 20 | | database | 2 | 6 | 2 | 2 | 31 | +------------+--------------+-------------+-----------+--------+----------+OPTIMIZE TABLE操作によってFULLTEXTインデックスキャッシュがフラッシュされたため、INNODB_FT_INDEX_CACHEテーブルは空になっています。mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE LIMIT 5; Empty set (0.00 sec) -
test/articlesテーブルからいくつかのレコードを削除します。mysql> DELETE FROM test.articles WHERE id < 4; -
INNODB_FT_DELETEDテーブルをクエリーします。 このテーブルには、FULLTEXTインデックスから削除された行が記録されます。 DML 操作中にコストの高いインデックス再編成が行われないようにするために、新しく削除されたレコードに関する情報は個別に格納され、テキスト検索を実行すると検索結果からフィルタで除外され、OPTIMIZE TABLEを実行するとメインの検索インデックスから削除されます。mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED; +--------+ | DOC_ID | +--------+ | 2 | | 3 | | 4 | +--------+ -
OPTIMIZE TABLEを実行して、削除されたレコードを消去します。mysql> OPTIMIZE TABLE articles; +---------------+----------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------------+----------+----------+----------+ | test.articles | optimize | status | OK | +---------------+----------+----------+----------+これで、
INNODB_FT_DELETEDテーブルは空になります。mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED; Empty set (0.00 sec) -
INNODB_FT_CONFIGテーブルをクエリーします。 このテーブルには、FULLTEXTインデックスに関するメタデータとそれに関連する処理が含まれています。optimize_checkpoint_limit:OPTIMIZE TABLEの実行が停止するまでの秒数。synced_doc_id: 次に発行されるDOC_IDです。stopword_table_name: ユーザー定義のストップワードテーブルのdatabase/table名。 ユーザー定義のストップワードテーブルがない場合、VALUEカラムは空です。use_stopword:FULLTEXTインデックスの作成時に定義されるストップワードテーブルを使用するかどうかを示します。
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_CONFIG; +---------------------------+-------+ | KEY | VALUE | +---------------------------+-------+ | optimize_checkpoint_limit | 180 | | synced_doc_id | 8 | | stopword_table_name | | | use_stopword | 1 | +---------------------------+-------+ -
innodb_optimize_fulltext_onlyは一時的にのみ有効にすることを意図しているため、無効にします:mysql> SET GLOBAL innodb_optimize_fulltext_only=OFF;