Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル

14.14.4 InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル

MySQL 5.6.4 での InnoDB テーブルに対する FULLTEXT インデックスサポートの導入により、INFORMATION_SCHEMA データベースに次のテーブルが追加されました。

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                     |
+-------------------------------------------+
6 rows in set (0.00 sec)

テーブルの概要

  • INNODB_FT_CONFIG: FULLTEXT インデックスに関するメタデータと、InnoDB テーブルに対するそれに関連する処理を表示します。

  • INNODB_FT_BEING_DELETED: OPTIMIZE TABLE の保守操作中にのみ使用される INNODB_FT_DELETED テーブルのスナップショットを提供します。OPTIMIZE TABLE が実行されると、INNODB_FT_BEING_DELETED テーブルは空になり、INNODB_FT_DELETED テーブルから DOC_ID が削除されます。INNODB_FT_BEING_DELETED の内容は一般に有効期間が短いため、モニタリングやデバッグでのこのテーブルの有用性は限られます。FULLTEXT インデックスを持つテーブルでの OPTIMIZE TABLE の実行の詳細は、セクション12.9.6「MySQL の全文検索の微調整」を参照してください。

  • INNODB_FT_DELETED: InnoDB テーブルの FULLTEXT インデックスから削除された行を記録します。InnoDB FULLTEXT インデックスに対する DML 操作中にコストの高いインデックス再編成が行われないようにするために、新しく削除された単語に関する情報は個別に格納され、テキスト検索を実行すると検索結果からフィルタで除外され、OPTIMIZE TABLE テーブルを実行したときにのみメインの検索インデックスから削除されます。

  • INNODB_FT_DEFAULT_STOPWORD: FULLTEXT インデックスを作成するときにデフォルトで使用されるストップワードのリストを保持します。

    INNODB_FT_DEFAULT_STOPWORD テーブルについては、セクション12.9.4「全文ストップワード」を参照してください。

  • INNODB_FT_INDEX_TABLE: FULLTEXT インデックスに対するテキスト検索を処理するために使用される逆インデックスに関するデータが含まれています。

  • INNODB_FT_INDEX_CACHE: FULLTEXT インデックス内の新しく挿入された行に関するトークン情報が含まれています。DML 操作中の負荷の大きなインデックスの再編成を避けるために、新しくインデックスが付けられた単語に関する情報は個別に格納され、OPTIMIZE TABLE の実行時、サーバーのシャットダウン時、またはキャッシュサイズが innodb_ft_cache_sizeinnodb_ft_total_cache_size で定義された制限を超えたときにのみ、メインの検索インデックスと組み合わされます。

注記

INNODB_FT_DEFAULT_STOPWORD テーブルを除き、innodb_ft_aux_table 構成変数を FULLTEXT インデックスを含むテーブルの名前 (database_name/table_name) に設定する必要があります。そうしないと、InnoDB FULLTEXT インデックスの INFORMATION_SCHEMA テーブルが空で表示されます。

例 14.16 InnoDB FULLTEXT インデックスの INFORMATION_SCHEMA テーブル

この例では、FULLTEXT インデックスを含むテーブルを使用して、FULLTEXT インデックスの INFORMATION_SCHEMA テーブルに含まれているデータを示します。

  1. FULLTEXT インデックスを含むテーブルを作成し、一部のデータを挿入します。

    mysql> CREATE TABLE articles (
          id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
          title VARCHAR(200),
          body TEXT,
          FULLTEXT (title,body)
         ) ENGINE=InnoDB;
    
    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 will 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 ...');
  2. innodb_ft_aux_table 変数を FULLTEXT インデックスを含むテーブルの名前に設定します。INNODB_FT_DEFAULT_STOPWORD テーブルを除き、この変数が設定されていないと InnoDB FULLTEXT INFORMATION_SCHEMA テーブルが空で表示されます。

    SET GLOBAL innodb_ft_aux_table = 'test/articles';
  3. 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 |
    +------------+--------------+-------------+-----------+--------+----------+
    5 rows in set (0.00 sec)
  4. 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;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> OPTIMIZE TABLE articles;
    +---------------+----------+----------+----------+
    | Table         | Op       | Msg_type | Msg_text |
    +---------------+----------+----------+----------+
    | test.articles | optimize | status   | OK       |
    +---------------+----------+----------+----------+
    1 row in set (0.03 sec)
  5. 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 |
    +------------+--------------+-------------+-----------+--------+----------+
    5 rows in set (0.00 sec)

    OPTIMIZE TABLE 操作によって FULLTEXT インデックスキャッシュがフラッシュされたため、INNODB_FT_INDEX_CACHE テーブルは空になっています。

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE LIMIT 5;
    Empty set (0.00 sec)
  6. test/articles テーブルからいくつかのレコードを削除します。

    mysql> DELETE FROM test.articles WHERE id < 4;
    Query OK, 3 rows affected (0.11 sec)
  7. INNODB_FT_DELETED テーブルをクエリーします。このテーブルには、FULLTEXT インデックスから削除された行が記録されます。DML 操作中にコストの高いインデックス再編成が行われないようにするために、新しく削除されたレコードに関する情報は個別に格納され、テキスト検索を実行すると検索結果からフィルタで除外され、OPTIMIZE TABLE を実行するとメインの検索インデックスから削除されます。

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;
    +--------+
    | DOC_ID |
    +--------+
    |      2 |
    |      3 |
    |      4 |
    +--------+
    3 rows in set (0.00 sec)
  8. OPTIMIZE TABLE を実行して、削除されたレコードを消去します。

    mysql> OPTIMIZE TABLE articles;
    +---------------+----------+----------+----------+
    | Table         | Op       | Msg_type | Msg_text |
    +---------------+----------+----------+----------+
    | test.articles | optimize | status   | OK       |
    +---------------+----------+----------+----------+
    1 row in set (0.10 sec)

    INNODB_FT_DELETED テーブルが空で表示されるようになります。

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;
    Empty set (0.00 sec)
  9. INNODB_FT_CONFIG テーブルをクエリーします。このテーブルには、FULLTEXT インデックスに関するメタデータとそれに関連する処理が含まれています。

    • optimize_checkpoint_limit は、OPTIMIZE TABLE の実行が停止するまでの秒数です。

    • synced_doc_id は、発行される次の DOC_ID です。

    • stopword_table_name は、ユーザー定義のストップワードテーブルに対する database/table の名前です。ユーザー定義のストップワードテーブルがない場合、このフィールドは空です。

    • 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     |
    +---------------------------+-------+
    4 rows in set (0.00 sec)


User Comments
Sign Up Login You must be logged in to post a comment.