Spec-Zone.ru › MySQL 5.7

14.16.4 Таблицы индексов FULLTEXT InnoDB INFORMATION_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: Предоставляет метаданные об индексе FULLTEXT и связанной обработке для таблицы.

  • INNODB_FT_BEING_DELETED: Предоставляет моментальный снимок таблицы INNODB_FT_DELETED; она используется только во время операции обслуживания OPTIMIZE TABLE. При выполнении OPTIMIZE TABLE, таблица INNODB_FT_BEING_DELETED очищается, а значения DOC_ID удаляются из таблицы INNODB_FT_DELETED. Поскольку содержимое таблицы INNODB_FT_BEING_DELETED обычно существует недолго, эта таблица имеет ограниченную полезность для мониторинга или отладки. Подробную информацию о выполнении OPTIMIZE TABLE на таблицах с индексами FULLTEXT см. в разделе 12.9.6, «Настройка поиска MySQL FULLTEXT».

  • INNODB_FT_DELETED: Содержит строки, удаленные из индекса FULLTEXT для таблицы.

    Чтобы избежать дорогостоящей реорганизации индекса во время операций DML для индекса InnoDB FULLTEXT, информация о новых удаленных словах хранится отдельно, отфильтровывается из результатов поиска при выполнении текстового поиска и удаляется из основного индекса поиска только при выполнении оператора OPTIMIZE TABLE для таблицы InnoDB.

  • 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_size или innodb_ft_total_cache_size.

Примечание

За исключением таблицы INNODB_FT_DEFAULT_STOPWORD, эти таблицы изначально пустые. Перед запросом к любой из них установите значение системной переменной innodb_ft_aux_table в имя таблицы, содержащей индекс (включая имя базы данных), например, test/articles.

Пример 14.5 Индекс FULLTEXT InnoDB в таблицах 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;
    
    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 в имя таблицы с индексом FULLTEXT. Если эта переменная не установлена, таблицы InnoDB FULLTEXT INFORMATION_SCHEMA будут пусты, за исключением INNODB_FT_DEFAULT_STOPWORD.

    SET GLOBAL innodb_ft_aux_table = 'test/articles';
    
  3. Запросите таблицу INNODB_FT_INDEX_CACHE, которая отображает информацию о недавно вставленных строках в индексе FULLTEXT. Чтобы избежать дорогостоящей реорганизации индекса во время операций DML, данные для недавно вставленных строк хранятся в кэше индекса FULLTEXT до тех пор, пока не выполняется OPTIMIZE TABLE (или пока сервер не будет остановлен, или пока не будут превышены лимиты кэша).

    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 и запустите OPTIMIZE TABLE для таблицы, содержащей индекс FULLTEXT. Эта операция очищает содержимое кэша индекса FULLTEXT в основной индекс FULLTEXT. innodb_optimize_fulltext_only изменяет способ работы оператора OPTIMIZE TABLE с таблицами InnoDB, и предполагается, что он будет включен временно, во время операций технического обслуживания с таблицами InnoDB с индексами FULLTEXT.

    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, чтобы просмотреть информацию о данных в основном индексе 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 |
    +------------+--------------+-------------+-----------+--------+----------+
    

    Таблица INNODB_FT_INDEX_CACHE теперь пуста, так как операция OPTIMIZE TABLE очистила кэш индекса FULLTEXT.

    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;
    
  7. Запросите таблицу INNODB_FT_DELETED. Эта таблица записывает строки, которые были удалены из индекса FULLTEXT. Чтобы избежать дорогостоящей реорганизации индекса во время операций DML, информация о недавно удаленных записях хранится отдельно, отфильтровывается из результатов поиска при выполнении текстового поиска и удаляется из основного поискового индекса при выполнении OPTIMIZE TABLE.

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;
    +--------+
    | DOC_ID |
    +--------+
    |      2 |
    |      3 |
    |      4 |
    +--------+
    
  8. Выполните 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)
    
  9. Запросите таблицу 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     |
    +---------------------------+-------+
    
  10. Отключите innodb_optimize_fulltext_only, так как он предназначен для временного включения:

    mysql> SET GLOBAL innodb_optimize_fulltext_only=OFF;
    

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-information-schema-fulltext_index-tables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API