### 15.15.4 InnoDB 信息\_SCHEMA 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`](information-schema-innodb-ft-config-table.html)：提供有关`全文`索引和相关处理`InnoDB`桌子。

-   [`INNODB_FT_BEING_DELETED`](information-schema-innodb-ft-being-deleted-table.html): 提供快照[`INNODB_FT_DELETED`](information-schema-innodb-ft-deleted-table.html)桌子;它只在一个期间使用[`优化表`](optimize-table.html)维护操作。什么时候[`优化表`](optimize-table.html)运行时，[`INNODB_FT_BEING_DELETED`](information-schema-innodb-ft-being-deleted-table.html)表被清空，并且`DOC_ID`值被从[`INNODB_FT_DELETED`](information-schema-innodb-ft-deleted-table.html)桌子。因为内容[`INNODB_FT_BEING_DELETED`](information-schema-innodb-ft-being-deleted-table.html)通常寿命很短，因此此表在监视或调试方面的实用性有限。有关跑步的信息[`优化表`](optimize-table.html)在桌子上`全文`索引，见[第 12.10.6 节，“微调 MySQL 全文搜索”](fulltext-fine-tuning.html).

-   [`INNODB_FT_DELETED`](information-schema-innodb-ft-deleted-table.html)：存储从`全文`一个索引`InnoDB`桌子。为了避免在 DML 操作期间为`InnoDB` `全文`索引，有关新删除单词的信息单独存储，在您进行文本搜索时从搜索结果中过滤出来，并且仅在您发出[`优化表`](optimize-table.html)的声明`InnoDB`桌子。

-   [`INNODB_FT_DEFAULT_STOPWORD`](information-schema-innodb-ft-default-stopword-table.html): 保存一个列表[停用词](glossary.html#glos_stopword)创建时默认使用的`全文`索引`InnoDB`表。

    有关信息[`INNODB_FT_DEFAULT_STOPWORD`](information-schema-innodb-ft-default-stopword-table.html)表，见[第 12.10.4 节，“全文停用词”](fulltext-stopwords.html).

-   [`INNODB_FT_INDEX_TABLE`](information-schema-innodb-ft-index-table-table.html)：提供有关用于处理文本搜索的倒排索引的信息`全文`的索引`InnoDB`桌子。

-   [`INNODB_FT_INDEX_CACHE`](information-schema-innodb-ft-index-cache-table.html)：提供有关新插入的行的令牌信息`全文`指数。为了避免在 DML 操作期间进行昂贵的索引重组，新索引词的信息被单独存储，只有在[`优化表`](optimize-table.html)当服务器关闭或缓存大小超过由[`innodb_ft_cache_size`](innodb-parameters.html#sysvar_innodb_ft_cache_size)要么[`innodb_ft_total_cache_size`](innodb-parameters.html#sysvar_innodb_ft_total_cache_size)系统变量。

笔记

除了[`INNODB_FT_DEFAULT_STOPWORD`](information-schema-innodb-ft-default-stopword-table.html)表，这些表最初是空的。在查询其中任何一个之前，请设置[`innodb_ft_aux_table`](innodb-parameters.html#sysvar_innodb_ft_aux_table)系统变量到包含该表的名称（包括数据库名称）`全文`索引（例如，`测试/文章`）。

[](<>)

**示例 15.5 InnoDB FULLTEXT 索引信息\_SCHEMA 表**

此示例使用带有`全文`索引以显示包含在`全文`指数`INFORMATION_SCHEMA`表。

1.  创建一个表`全文`索引并插入一些数据：

    ```
    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 ...');
    ```

2.  设置[`innodb_ft_aux_table`](innodb-parameters.html#sysvar_innodb_ft_aux_table)变量表的名称与`全文`指数。如果未设置此变量，则`InnoDB` `全文` `INFORMATION_SCHEMA`表是空的，除了[`INNODB_FT_DEFAULT_STOPWORD`](information-schema-innodb-ft-default-stopword-table.html).

    ```
    mysql> SET GLOBAL innodb_ft_aux_table = 'test/articles';
    ```

3.  查询[`INNODB_FT_INDEX_CACHE`](information-schema-innodb-ft-index-cache-table.html)表，它显示了新插入的行的信息`全文`指数。为了避免在 DML 操作期间进行昂贵的索引重组，新插入行的数据保留在`全文`索引缓存直到[`优化表`](optimize-table.html)运行（或直到服务器关闭或超过缓存限制）。

    ```
    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 |
    +------------+--------------+-------------+-----------+--------+----------+
    ```

4.  启用[`innodb_optimize_fulltext_only`](innodb-parameters.html#sysvar_innodb_optimize_fulltext_only)系统变量并运行[`优化表`](optimize-table.html)在包含`全文`指数。此操作会刷新`全文`索引缓存到主`全文`指数。[`innodb_optimize_fulltext_only`](innodb-parameters.html#sysvar_innodb_optimize_fulltext_only)改变方式[`优化表`](optimize-table.html)语句作用于`InnoDB`表，并打算在维护操作期间临时启用`InnoDB`表`全文`索引。

    ```
    mysql> SET GLOBAL innodb_optimize_fulltext_only=ON;

    mysql> OPTIMIZE TABLE articles;
    +---------------+----------+----------+----------+
    | Table         | Op       | Msg_type | Msg_text |
    +---------------+----------+----------+----------+
    | test.articles | optimize | status   | OK       |
    +---------------+----------+----------+----------+
    ```

5.  查询[`INNODB_FT_INDEX_TABLE`](information-schema-innodb-ft-index-table-table.html)表中查看有关数据的主要信息`全文`索引，包括有关刚刚从`全文`索引缓存。

    ```
    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 |
    +------------+--------------+-------------+-----------+--------+----------+
    ```

    这[`INNODB_FT_INDEX_CACHE`](information-schema-innodb-ft-index-cache-table.html)表现在是空的，因为[`优化表`](optimize-table.html)操作冲刷了`全文`索引缓存。

    ```
    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE LIMIT 5;
    Empty set (0.00 sec)
    ```

6.  删除一些记录`测试/文章`桌子。

    ```
    mysql> DELETE FROM test.articles WHERE id < 4;
    ```

7.  查询[`INNODB_FT_DELETED`](information-schema-innodb-ft-deleted-table.html)桌子。该表记录了从`全文`指数。为避免在 DML 操作期间进行昂贵的索引重组，有关新删除记录的信息将单独存储，在执行文本搜索时从搜索结果中过滤掉，并在运行时从主搜索索引中删除[`优化表`](optimize-table.html).

    ```
    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;
    +--------+
    | DOC_ID |
    +--------+
    |      2 |
    |      3 |
    |      4 |
    +--------+
    ```

8.  跑步[`优化表`](optimize-table.html)删除已删除的记录。

    ```
    mysql> OPTIMIZE TABLE articles;
    +---------------+----------+----------+----------+
    | Table         | Op       | Msg_type | Msg_text |
    +---------------+----------+----------+----------+
    | test.articles | optimize | status   | OK       |
    +---------------+----------+----------+----------+
    ```

    这[`INNODB_FT_DELETED`](information-schema-innodb-ft-deleted-table.html)表现在应该是空的。

    ```
    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;
    Empty set (0.00 sec)
    ```

9.  查询[`INNODB_FT_CONFIG`](information-schema-innodb-ft-config-table.html)桌子。此表包含有关`全文`索引及相关处理：

    -   `优化检查点限制`: 秒数之后[`优化表`](optimize-table.html)运行停止。

    -   `synced_doc_id`： 下一个`DOC_ID`予以发行。

    -   `停用词表名`： 这*`数据库/表`*用户定义的停用词表的名称。这`价值`如果没有用户定义的停用词表，则列为空。

    -   `使用停用词`: 表示是否使用了停用词表，它是在`全文`创建索引。

    ```
    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_CONFIG;
    +---------------------------+-------+
    | KEY                       | VALUE |
    +---------------------------+-------+
    | optimize_checkpoint_limit | 180   |
    | synced_doc_id             | 8     |
    | stopword_table_name       |       |
    | use_stopword              | 1     |
    +---------------------------+-------+
    ```

10. 禁用[`innodb_optimize_fulltext_only`](innodb-parameters.html#sysvar_innodb_optimize_fulltext_only)，因为它只是暂时启用的：

    ```
    mysql> SET GLOBAL innodb_optimize_fulltext_only=OFF;
    ```
