Схема информации таблицы INNODB_FT_INDEX_CACHE
Таблица Схема информации INNODB_FT_INDEX_CACHE содержит информацию о строках, которые недавно были вставлены в InnoDB полнотекстовый индекс. Чтобы избежать повторной организации полнотекстового индекса каждый раз при внесении изменений, что было бы очень дорого, новые изменения хранятся отдельно и интегрируются только при выполнении команды OPTIMIZE TABLE.
Для просмотра таблицы требуется SUPER право доступа, а также необходимо установить системную переменную innodb_ft_aux_table.
Она содержит следующие столбцы:
| Столбец | Описание |
|---|---|
WORD |
Слово из текста новой добавленной строки. Слова могут встречаться в таблице несколько раз, один раз на каждую комбинацию DOC_ID и POSITION. |
FIRST_DOC_ID |
Идентификатор первого документа, где это слово встречается в индексе. |
LAST_DOC_ID |
Идентификатор последнего документа, где это слово встречается в индексе. |
DOC_COUNT |
Количество строк, содержащих это слово в индексе. |
DOC_ID |
Идентификатор документа новой добавленной строки, либо соответствующий столбец ID, либо внутреннее значение InnoDB. |
POSITION |
Позиция этого экземпляра слова в DOC_ID, как смещение, добавленное к предыдущему экземпляру POSITION . |
Обратите внимание, что для обработки данных полнотекстового индекса InnoDB, переменная innodb_optimize_fulltext_only должна быть установлена в 1. Когда это выполнено, и выполнена команда OPTIMIZE TABLE, таблица INNODB_FT_INDEX_CACHE будет очищена, а таблица INNODB_FT_INDEX_TABLE будет обновлена.
Примеры
SELECT * FROM INNODB_FT_INDEX_CACHE; +------------+--------------+-------------+-----------+--------+----------+ | WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | +------------+--------------+-------------+-----------+--------+----------+ | and | 4 | 4 | 1 | 4 | 0 | | arrived | 4 | 4 | 1 | 4 | 20 | | ate | 1 | 1 | 1 | 1 | 4 | | everybody | 1 | 1 | 1 | 1 | 8 | | goldilocks | 4 | 4 | 1 | 4 | 9 | | hungry | 3 | 3 | 1 | 3 | 8 | | then | 4 | 4 | 1 | 4 | 4 | | wicked | 2 | 2 | 1 | 2 | 4 | | witch | 2 | 2 | 1 | 2 | 11 | +------------+--------------+-------------+-----------+--------+----------+ 9 rows in set (0.00 sec) INSERT INTO test.ft_innodb VALUES(3,'And she ate a pear'); SELECT * FROM INNODB_FT_INDEX_CACHE; +------------+--------------+-------------+-----------+--------+----------+ | WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | +------------+--------------+-------------+-----------+--------+----------+ | and | 4 | 5 | 2 | 4 | 0 | | and | 4 | 5 | 2 | 5 | 0 | | arrived | 4 | 4 | 1 | 4 | 20 | | ate | 1 | 5 | 2 | 1 | 4 | | ate | 1 | 5 | 2 | 5 | 8 | | everybody | 1 | 1 | 1 | 1 | 8 | | goldilocks | 4 | 4 | 1 | 4 | 9 | | hungry | 3 | 3 | 1 | 3 | 8 | | pear | 5 | 5 | 1 | 5 | 14 | | she | 5 | 5 | 1 | 5 | 4 | | then | 4 | 4 | 1 | 4 | 4 | | wicked | 2 | 2 | 1 | 2 | 4 | | witch | 2 | 2 | 1 | 2 | 11 | +------------+--------------+-------------+-----------+--------+----------+
OPTIMIZE TABLE test.ft_innodb\G
*************************** 1. row ***************************
Table: test.ft_innodb
Op: optimize
Msg_type: note
Msg_text: Table does not support optimize, doing recreate + analyze instead
*************************** 2. row ***************************
Table: test.ft_innodb
Op: optimize
Msg_type: status
Msg_text: OK
2 rows in set (2.24 sec)
SELECT * FROM INNODB_FT_INDEX_CACHE;
+------------+--------------+-------------+-----------+--------+----------+
| WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION |
+------------+--------------+-------------+-----------+--------+----------+
| and | 4 | 5 | 2 | 4 | 0 |
| and | 4 | 5 | 2 | 5 | 0 |
| arrived | 4 | 4 | 1 | 4 | 20 |
| ate | 1 | 5 | 2 | 1 | 4 |
| ate | 1 | 5 | 2 | 5 | 8 |
| everybody | 1 | 1 | 1 | 1 | 8 |
| goldilocks | 4 | 4 | 1 | 4 | 9 |
| hungry | 3 | 3 | 1 | 3 | 8 |
| pear | 5 | 5 | 1 | 5 | 14 |
| she | 5 | 5 | 1 | 5 | 4 |
| then | 4 | 4 | 1 | 4 | 4 |
| wicked | 2 | 2 | 1 | 2 | 4 |
| witch | 2 | 2 | 1 | 2 | 11 |
+------------+--------------+-------------+-----------+--------+----------+
13 rows in set (0.00 sec)
Команда OPTIMIZE TABLE не оказывает никакого эффекта, потому что переменная innodb_optimize_fulltext_only не была установлена:
SHOW VARIABLES LIKE 'innodb_optimize_fulltext_only'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | innodb_optimize_fulltext_only | OFF | +-------------------------------+-------+ SET GLOBAL innodb_optimize_fulltext_only =1; OPTIMIZE TABLE test.ft_innodb; +----------------+----------+----------+----------+ | Table | Op | Msg_type | Msg_text | +----------------+----------+----------+----------+ | test.ft_innodb | optimize | status | OK | +----------------+----------+----------+----------+ SELECT * FROM INNODB_FT_INDEX_CACHE; Empty set (0.00 sec)
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/information-schema-innodb_ft_index_cache-table/