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 для индекса
InnoDBFULLTEXT, информация о новых удаленных словах хранится отдельно, отфильтровывается из результатов поиска при выполнении текстового поиска и удаляется из основного индекса поиска только при выполнении оператора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.
-
Создайте таблицу с индексом
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.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.