17.15.4 Таблицы индексов полнотекстового поиска InnoDB 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 |
+-------------------------------------------+
Обзор таблиц
INNODB_FT_CONFIG: Предоставляет метаданные об индексе полнотекстового поиска и связанной обработке для таблицы.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: Содержит строки, удаленные из индекса полнотекстового поиска для таблицы.Для предотвращения дорогостоящей реорганизации индекса во время операций DML для индекса
InnoDBFULLTEXT, информация о недавно удаленных словах хранится отдельно, отфильтровывается из результатов поиска при выполнении текстового поиска и удаляется из основного индекса поиска только при выполнении командыOPTIMIZE TABLEдля таблицыInnoDB.-
INNODB_FT_DEFAULT_STOPWORD: Содержит список стоп-слов, используемых по умолчанию при создании индекса полнотекстового поиска для таблиц.Дополнительную информацию о таблице
INNODB_FT_DEFAULT_STOPWORDсм. в разделе 14.9.4 «Стоп-слова полнотекстового поиска». INNODB_FT_INDEX_TABLE: Предоставляет информацию об инвертированном индексе, используемом для обработки поисковых запросов к индексу полнотекстового поиска таблицы.INNODB_FT_INDEX_CACHE: Предоставляет информацию о токенах недавно вставленных строк в индекс полнотекстового поиска. Для избежания дорогостоящей реорганизации индекса во время операций DML информация о новых проиндексированных словах хранится отдельно и объединяется с основным индексом поиска только при выполненииOPTIMIZE TABLE, при завершении работы сервера или при превышении размера кэша, заданного системной переменнойinnodb_ft_cache_sizeилиinnodb_ft_total_cache_size.
За исключением таблицы INNODB_FT_DEFAULT_STOPWORD, эти таблицы изначально пустые. Перед запросом к любой из этих таблиц установите значение системной переменной innodb_ft_aux_table в имя (включая имя базы данных) таблицы, содержащей индекс полнотекстового поиска (например, test/articles).
Пример 17.5 Индекс FULLTEXT InnoDB таблицы INFORMATION_SCHEMA
В этом примере используется таблица с индексом FULLTEXT, чтобы продемонстрировать данные, содержащиеся в индексе FULLTEXT таблиц INFORMATION_SCHEMA.
-
Создайте таблицу с индексом
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 ...'); -
Установите переменную
innodb_ft_aux_tableна имя таблицы с индексомFULLTEXT. Если эта переменная не установлена, таблицыInnoDBFULLTEXTINFORMATION_SCHEMAбудут пустыми, за исключением таблицыINNODB_FT_DEFAULT_STOPWORD.mysql>
SET GLOBAL innodb_ft_aux_table = 'test/articles'; -
Запросите таблицу
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 | +------------+--------------+-------------+-----------+--------+----------+ -
Включите переменную системы
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 | +---------------+----------+----------+----------+ -
Запросите таблицу
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) -
Удалите некоторые записи из таблицы
test/articles.mysql>
DELETE FROM test.articles WHERE id < 4; -
Запросите таблицу
INNODB_FT_DELETED. Эта таблица записывает строки, удаленные из индексаFULLTEXT. Чтобы избежать дорогостоящей реорганизации индекса во время операций DML, информация о недавно удаленных записях хранится отдельно, отфильтровывается из результатов поиска при выполнении текстового поиска и удаляется из основного индекса поиска при выполненииOPTIMIZE TABLE.mysql>
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;+--------+ | DOC_ID | +--------+ | 2 | | 3 | | 4 | +--------+ -
Выполните
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) -
Запросите таблицу
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 | +---------------------------+-------+ -
Отключите
innodb_optimize_fulltext_only, так как он предназначен для временного включения:mysql>
SET GLOBAL innodb_optimize_fulltext_only=OFF;
© 2025 Oracle
Licensed under the GPLv2 License.