Spec-Zone.ru › MySQL 9.2

17.15.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 см. в Разделе 14.9.6, «Настройка параметров поиска MySQL по полному тексту».

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

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

  • INNODB_FT_DEFAULT_STOPWORD: Содержит список стоп-слов, используемых по умолчанию при создании индекса FULLTEXT для таблиц.

    Подробную информацию о таблице INNODB_FT_DEFAULT_STOPWORD см. в Разделе 14.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 на имя таблицы, содержащей индекс FULLTEXT (например, test/articles).

Пример 17.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.

    mysql> 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-9.2-en/innodb-information-schema-fulltext_index-tables.html

Spec-Zone.ru

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