首页 > 数据库 > 文库 > 正文

InnoDB 层全文索引字典表 全面认识 information_schema

2024-09-07 22:12:55
字体:
来源:转载
供稿:网友
  在上一篇中,我们详细介绍了 InnoDB 层的锁、事务、及其相关的统计信息字典表 ,本期我们将为大家带来系列第七篇《InnoDB 层全文索引字典表 | 全方位认识 information_schema》。
 
  |  INNODB_FT_CONFIG
 
  该表提供查询有关InnoDB表的FULLTEXT索引和关联的元数据信息
 
  查询此表之前,需要先设置innodb_ft_aux_table='db_name/tb_name',db_name/tb_name为包含全文索引的表名和库名
  查询该表的账户需要有PROCESS权限,该表为Memory引擎临时表
  下面是该表中存储的信息内容
 
  root@localhost : test 11:58:58> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_CONFIG;
  +---------------------------+-------+
  | KEY                      | VALUE |
  +---------------------------+-------+
  | optimize_checkpoint_limit | 180  |
  | synced_doc_id            | 0    |
  | stopword_table_name      |      |
  | use_stopword              | 1    |
  +---------------------------+-------+
  4 rows in set (0.00 sec)
  字段含义如下:
 
  KEY:表示包含FULLTEXT索引的InnoDB表的元数据项的名称
  VALUE:表示与相应的KEY列关联的值,反映InnoDB表的FULLTEXT索引的某方面的某些限制的值
  PS:
 
  该表仅用于内部配置使用。并不用做统计信息
  KEY列的值可能会根据InnoDB全文处理的性能调优和调试需求而变化。其中记录的元数据项名称值包括:
  * optimize_checkpoint_limit:OPTIMIZE TABLE语句执行的时间,单位秒
  * synced_doc_id:下一个要执行的DOC_ID值
  * stopword_table_name:用户定义的保存停用词表的数据库/表名。如果未自定义停用词表,则该项记录的value列为空
  * use_stopword:表示是否使用停用词表,该停用词表在创建FULLTEXT索引时定义,默认停用词表为INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
  |  INNODB_FT_BEING_DELETED
 
  该表仅在OPTIMIZE TABLE语句执行维护操作期间作为INNODB_FT_DELETED表的快照数据存放使用。运行OPTIMIZE TABLE语句时,会先清空INNODB_FT_BEING_DELETED表中的数据,保存INNODB_FT_DELETED表中的快照数据到INNODB_FT_BEING_DELETED表,并从INNODB_FT_DELETED表中删除DOC_ID。由于INNODB_FT_BEING_DELETED表中的内容通常生命周期较短,因此该表中的数据对于监控或者调试来说用处并不大
 
  该表中默认不记录数据,需要设置系统配置参数innodb_ft_aux_table=string(string表示db_name.tb_name字符串),并创建好全文索引,设置好停用词等
  查询该表的账户需要有PROCESS权限,该表为Memory引擎临时表
  下面是该表中存储的信息内容
 
  # 设置innodb_ft_aux_table系统参数
  root@localhost : test 11:50:16> SET GLOBAL innodb_ft_aux_table = 'test/test';
  Query OK, 0 rows affected (0.00 sec)
  # 创建全文索引
  root@localhost : test 11:26:30> select * from test;
  +------+---------+
  | id  | test    |
  +------+---------+
  |    1 | a b c d |
  |    1 | a b c d |
  |    2 | a b c d |
  +------+---------+
  3 rows in set (0.00 sec)
  root@localhost : test 11:51:06> alter table test add fulltext i_test(test);
  Query OK, 0 rows affected, 1 warning (0.13 sec)
  Records: 0  Duplicates: 0  Warnings: 1
  # 删除表中的数据
  root@localhost : test 11:55:09> delete from test where id=1;
  Query OK, 2 rows affected (0.06 sec)
  # 查询INNODB_FT_DELETED表和INNODB_FT_BEING_DELETED表中的数据,可以发现INNODB_FT_BEING_DELETED为空值,而INNODB_FT_DELETED表存放着被删除的全文索引值
  root@localhost : test 11:56:12> select * from information_schema.INNODB_FT_DELETED;
  +--------+
  | DOC_ID |
  +--------+
  |      2 |
  |      3 |
  +--------+
 
  字段含义如下:
 
  DOC_ID:该字段表示正在被删除的行的DOC_ID值。当对表使用OPTIMIZE TABLE语句将已删除行的数据从FULLTEXT索引中物理删除之前,执行了文本搜索时,此值用于跳过innodb_ft_index_table表中的行
  |  INNODB_FT_DELETED
 
  该表提供查询从InnoDB表的FULLTEXT索引中删除的行信息。它的存在是为了避免在InnoDB FULLTEXT索引的DML操作期间进行昂贵的索引重组操作,新删除的全文索引中单词的信息将单独存储在该表中,在执行文本搜索时从中过滤出搜索结果,该表中的信息仅在执行OPTIMIZE TABLE语句时清空
 
  该表中的信息默认不记录,需要使用innodb_ft_aux_table选项(该选项默认值为空串)指定需要记录哪个innodb引擎表的信息,例如:test/test
  查询该表的账户需要有PROCESS权限,该表为Memory引擎临时表
  下面是该表中存储的信息内容
 
  # 使用innodb_ft_aux_table 选项指定包含全文索引的Innodb引擎表
  root@localhost : test 11:41:01> SET GLOBAL innodb_ft_aux_table = 'test/test';
  Query OK, 0 rows affected (0.00 sec)
  # 删除表中的行
  root@localhost : test 11:41:24> delete from test where id=1;
  Query OK, 3 rows affected (0.02 sec)
  # 查询INNODB_FT_DELETED表,此时INNODB_FT_DELETED表中就包含了被删除的全文索引的DOC_ID值
  root@localhost : test 11:41:29> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;
  +--------+
  | DOC_ID |
  +--------+
  |      4 |
  |      5 |
  |      6 |
  |    10 |
  |    11 |
  |    12 |
  |    13 |
  +--------+
  7 rows in set (0.00 sec)
 
  该表为默认的全文索引停用词表,提供查询停用词列表值。启用停用词表需要开启参数innodb_ft_enable_stopword=ON,该参数默认为ON,启用停用词功能之后,如果innodb_ft_user_stopword_table选项(针对指定的innodb引擎表中的全文索引生效)自定义了停用词库表名称值,则停用词功能使用innodb_ft_user_stopword_table选项指定的停用词表,如果innodb_ft_user_stopword_table选项未指定,而innodb_ft_server_stopword_table选项(针对所有的innodb引擎表中的全文索引生效)自定义了停用词库表名称值,则同停用词功能使用innodb_ft_server_stopword_table选项指定的停用词表,如果innodb_ft_server_stopword_table选项也未指定,则使用默认的停用词表,即INNODB_FT_DEFAULT_STOPWORD表。

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表