Loading...
MySQL 9.5 Reference Manual 9.5의 17.15.4 InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
다음 테이블들은 FULLTEXT 인덱스에 대한 메타데이터를 제공합니다:
1mysql> SHOW TABLES FROM INFORMATION_SCHEMA LIKE 'INNODB_FT%'; 2+-------------------------------------------+ 3| Tables_in_INFORMATION_SCHEMA (INNODB_FT%) | 4+-------------------------------------------+ 5| INNODB_FT_CONFIG | 6| INNODB_FT_BEING_DELETED | 7| INNODB_FT_DELETED | 8| INNODB_FT_DEFAULT_STOPWORD | 9| INNODB_FT_INDEX_TABLE | 10| INNODB_FT_INDEX_CACHE | 11+-------------------------------------------+
INNODB_FT_CONFIG: InnoDB 테이블에 대한 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의 내용은 수명이 짧기 때문에, 이 테이블은 모니터링이나 디버깅 용도로는 활용도가 제한적입니다. FULLTEXT 인덱스가 있는 테이블에 대해 OPTIMIZE TABLE을 실행하는 방법은 Section 14.9.6, “Fine-Tuning MySQL Full-Text Search”를 참조하십시오.
INNODB_FT_DELETED: InnoDB 테이블의 FULLTEXT 인덱스에서 삭제된 행들을 저장합니다. InnoDB FULLTEXT 인덱스에 대한 DML 작업 중에 비용이 많이 드는 인덱스 재구성을 피하기 위해, 새로 삭제된 단어에 대한 정보는 별도로 저장되며, 텍스트 검색을 수행할 때 검색 결과에서 필터링되고, InnoDB 테이블에 대해 OPTIMIZE TABLE 문을 실행할 때만 메인 검색 인덱스에서 제거됩니다.
INNODB_FT_DEFAULT_STOPWORD: InnoDB 테이블에 FULLTEXT 인덱스를 생성할 때 기본적으로 사용되는 중지어(stopwords) 목록을 보유합니다.
INNODB_FT_DEFAULT_STOPWORD 테이블에 대한 정보는 Section 14.9.4, “Full-Text Stopwords”를 참조하십시오.
INNODB_FT_INDEX_TABLE: InnoDB 테이블의 FULLTEXT 인덱스에 대해 텍스트 검색을 처리하는 데 사용되는 역색인(inverted index)에 대한 정보를 제공합니다.
INNODB_FT_INDEX_CACHE: FULLTEXT 인덱스에 새로 삽입된 행에 대한 토큰 정보를 제공합니다. DML 작업 중에 비용이 많이 드는 인덱스 재구성을 피하기 위해, 새로 인덱스에 추가된 단어에 대한 정보는 별도로 저장되고, OPTIMIZE TABLE이 실행될 때, 서버가 셧다운될 때, 또는 캐시 크기가 innodb_ft_cache_size나 innodb_ft_total_cache_size 시스템 변수에 의해 정의된 한계를 초과할 때 메인 검색 인덱스와 결합됩니다.
참고
INNODB_FT_DEFAULT_STOPWORD 테이블을 제외하고, 이러한 테이블들은 초기에는 비어 있습니다. 이들 중 어느 하나라도 쿼리하기 전에, FULLTEXT 인덱스를 포함하는 테이블의 이름(데이터베이스 이름 포함)을 innodb_ft_aux_table 시스템 변수에 설정하십시오(예: test/articles).
Example 17.5 InnoDB FULLTEXT Index INFORMATION_SCHEMA Tables
이 예제는 FULLTEXT 인덱스가 있는 테이블을 사용하여 FULLTEXT 인덱스 INFORMATION_SCHEMA 테이블에 포함된 데이터를 설명합니다.
FULLTEXT 인덱스가 있는 테이블을 생성하고 일부 데이터를 삽입합니다:1mysql> CREATE TABLE articles ( 2 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 3 title VARCHAR(200), 4 body TEXT, 5 FULLTEXT (title,body) 6 ) ENGINE=InnoDB; 7 8mysql> INSERT INTO articles (title,body) VALUES 9 ('MySQL Tutorial','DBMS stands for DataBase ...'), 10 ('How To Use MySQL Well','After you went through a ...'), 11 ('Optimizing MySQL','In this tutorial we show ...'), 12 ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), 13 ('MySQL vs. YourSQL','In the following database comparison ...'), 14 ('MySQL Security','When configured properly, MySQL ...');
innodb_ft_aux_table 변수를 FULLTEXT 인덱스가 있는 테이블 이름으로 설정합니다. 이 변수가 설정되지 않으면, INNODB_FT_DEFAULT_STOPWORD를 제외한 InnoDB FULLTEXT INFORMATION_SCHEMA 테이블은 비어 있습니다.1mysql> SET GLOBAL innodb_ft_aux_table = 'test/articles';
FULLTEXT 인덱스에 새로 삽입된 행에 대한 정보를 보여주는 INNODB_FT_INDEX_CACHE 테이블을 쿼리합니다. DML 작업 중에 비용이 많이 드는 인덱스 재구성을 피하기 위해, 새로 삽입된 행에 대한 데이터는 OPTIMIZE TABLE가 실행될 때까지(또는 서버가 셧다운되거나 캐시 한도를 초과할 때까지) FULLTEXT 인덱스 캐시에 남아 있습니다.1mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE LIMIT 5; 2+------------+--------------+-------------+-----------+--------+----------+ 3| WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | 4+------------+--------------+-------------+-----------+--------+----------+ 5| 1001 | 5 | 5 | 1 | 5 | 0 | 6| after | 3 | 3 | 1 | 3 | 22 | 7| comparison | 6 | 6 | 1 | 6 | 44 | 8| configured | 7 | 7 | 1 | 7 | 20 | 9| database | 2 | 6 | 2 | 2 | 31 | 10+------------+--------------+-------------+-----------+--------+----------+
innodb_optimize_fulltext_only 시스템 변수를 활성화하고, FULLTEXT 인덱스를 포함하는 테이블에 대해 OPTIMIZE TABLE을 실행합니다. 이 작업은 FULLTEXT 인덱스 캐시의 내용을 메인 FULLTEXT 인덱스로 플러시합니다. innodb_optimize_fulltext_only는 InnoDB 테이블에 대해 OPTIMIZE TABLE 문이 작동하는 방식을 변경하며, FULLTEXT 인덱스가 있는 InnoDB 테이블에 대한 유지 관리 작업 중에 일시적으로 활성화하도록 설계되었습니다.1mysql> SET GLOBAL innodb_optimize_fulltext_only=ON; 2 3mysql> OPTIMIZE TABLE articles; 4+---------------+----------+----------+----------+ 5| Table | Op | Msg_type | Msg_text | 6+---------------+----------+----------+----------+ 7| test.articles | optimize | status | OK | 8+---------------+----------+----------+----------+
FULLTEXT 인덱스의 데이터에 대한 정보, 그리고 방금 FULLTEXT 인덱스 캐시에서 플러시된 데이터에 대한 정보를 보기 위해 INNODB_FT_INDEX_TABLE 테이블을 쿼리합니다.1mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE LIMIT 5; 2+------------+--------------+-------------+-----------+--------+----------+ 3| WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | 4+------------+--------------+-------------+-----------+--------+----------+ 5| 1001 | 5 | 5 | 1 | 5 | 0 | 6| after | 3 | 3 | 1 | 3 | 22 | 7| comparison | 6 | 6 | 1 | 6 | 44 | 8| configured | 7 | 7 | 1 | 7 | 20 | 9| database | 2 | 6 | 2 | 2 | 31 | 10+------------+--------------+-------------+-----------+--------+----------+
OPTIMIZE TABLE 작업이 FULLTEXT 인덱스 캐시를 플러시했기 때문에, 이제 INNODB_FT_INDEX_CACHE 테이블은 비어 있어야 합니다.
1mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE LIMIT 5; 2Empty set (0.00 sec)
test/articles 테이블에서 일부 레코드를 삭제합니다.1mysql> DELETE FROM test.articles WHERE id < 4;
INNODB_FT_DELETED 테이블을 쿼리합니다. 이 테이블은 FULLTEXT 인덱스에서 삭제된 행을 기록합니다. DML 작업 중에 비용이 많이 드는 인덱스 재구성을 피하기 위해, 새로 삭제된 레코드에 대한 정보는 별도로 저장되고, 텍스트 검색을 수행할 때 검색 결과에서 필터링되며, OPTIMIZE TABLE을 실행할 때 메인 검색 인덱스에서 제거됩니다.1mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED; 2+--------+ 3| DOC_ID | 4+--------+ 5| 2 | 6| 3 | 7| 4 | 8+--------+
OPTIMIZE TABLE을 실행합니다.1mysql> OPTIMIZE TABLE articles; 2+---------------+----------+----------+----------+ 3| Table | Op | Msg_type | Msg_text | 4+---------------+----------+----------+----------+ 5| test.articles | optimize | status | OK | 6+---------------+----------+----------+----------+
이제 INNODB_FT_DELETED 테이블은 비어 있어야 합니다.
1mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED; 2Empty set (0.00 sec)
INNODB_FT_CONFIG 테이블을 쿼리합니다. 이 테이블은 FULLTEXT 인덱스와 관련 처리에 대한 메타데이터를 포함합니다:optimize_checkpoint_limit: OPTIMIZE TABLE 실행이 중지되는 시점까지의 시간(초)입니다.synced_doc_id: 다음에 발급될 DOC_ID입니다.stopword_table_name: 사용자 정의 중지어(stopword) 테이블에 대한 database/table 이름입니다. 사용자 정의 중지어 테이블이 없으면 VALUE 열은 비어 있습니다.use_stopword: 중지어 테이블 사용 여부를 나타내며, FULLTEXT 인덱스가 생성될 때 정의됩니다.1mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_CONFIG; 2+---------------------------+-------+ 3| KEY | VALUE | 4+---------------------------+-------+ 5| optimize_checkpoint_limit | 180 | 6| synced_doc_id | 8 | 7| stopword_table_name | | 8| use_stopword | 1 | 9+---------------------------+-------+
innodb_optimize_fulltext_only는 일시적으로만 활성화하도록 설계되었으므로 비활성화합니다:1mysql> SET GLOBAL innodb_optimize_fulltext_only=OFF;
17.15.3 InnoDB INFORMATION_SCHEMA Schema Object Tables
17.15.5 InnoDB INFORMATION_SCHEMA Buffer Pool Tables