RDS for MySQL 全文检索相关问题的处理

RDS for MySQL 全文检索相关问题的处理

 

RDS MySQL 全文检索相关问题

1. RDS for MySQL 对全文检索的支持

2. RDS for MySQL 全文检索相关参数

3. RDS for MySQL 全文检索中文支持

3.1 MyISAM 引擎表

3.2 InnoDB 引擎表

4. like '%xxx%' 和全文检索的比较

4.1 like '%xxx%'

4.2 全文检索

5. ft_query_expansion_limit 参数作用


1. RDS for MySQL 对全文检索的支持

RDS MySQL 5.5 仅 MyISAM 引擎表支持全文索引,RDS MySQL 5.6 版本 MyISAM 和 InnoDB 引擎都支持全文索引。

 

2. RDS for MySQL 全文检索相关参数

可以在控制台  参数设置来设置下列参数。

# 参数名称 默认值 最小值 最大值 作用
1 ft_min_word_len 4 1 3600 MyISAM 引擎表全文索引包含的最小词长度
2 ft_query_expansion_limit 20 0 1000 MyISAM引擎表使用 with query expansion 进行全文搜索的最大匹配数
3 innodb_ft_min_token_size 3 0 16 InnoDB 引擎表全文索引包含的最小词长度
4 innodb_ft_max_token_size 84 10 84 InnoDB 引擎表全文索引包含的最大词长度
show global variables like 'ft_%'; --查看 MyISAM 引擎表全文检索相关参数

show global variables like 'innodb_ft%'; --查看 InnoDB 引擎表全文检索相关参数

3. RDS MySQL 全文检索中文支持

MyISAM 引擎表和 InnoDB 引擎表(需 RDS MySQL 5.6 版本)都支持中文全文检索。

 

3.1 MyISAM 引擎表

MyISAM 引擎表需要将 ft_min_word_len 设置为小于等于需要检索的最小分词长度,设置完毕后建议重新创建表上已有的全文索引;对于中文检索,建议将 ft_min_word_len 设置为 1。

CREATE TABLE `my_ft_test_02` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `idx_ft_name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

--重建全文索引步骤:

alter table my_ft_test_02 drop key idx_ft_name; --删除已有的全文索引

alter table my_ft_test_02 add fulltext key idx_ft_name (name); --重新添加全文索引

3.2 InnoDB 引擎表

InnoDB 引擎表需要将 innodb_ft_min_token_size 设置为小于等于需要检索的最小分词长度,设置完毕后建议重新创建表上已有的全文索引;对于中文检索,建议将 ft_min_word_len 设置为 1。

CREATE TABLE `my_ft_test_01` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `idx_ft_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

--重建全文索引的步骤:

alter table my_ft_test_01 drop key idx_ft_name; --删除已有的全文索引

alter table my_ft_test_01 add fulltext key idx_ft_name (name); --重新创建全文索引

4. like '%xxx%' 和全文检索的比较

4.1 like '%xxx%'

对于数据量比较小,查询条件无法分词的情况下,可以考虑使用 like '%xxx%' 来进行查询。但是由于 like  '%xxx%' 这样的条件无法使用字段上的索引,因此通常执行时间较长,会耗费比较多的资源;建议结合查询其他条件来使用,这样可以尽量使用其他字段的索引来加速查询。

 

4.2 全文检索

全文检索本身是按 进行匹配,因此返回的结果会和 like '%xxx%' 的方式有所区别

 

5. ft_query_expansion_limit 参数作用

MySQL 全文检索支持扩展检索,具体请参考带查询扩展的全文检索 

参数 ft_query_expansion_limit 的作用是指定MyISAM引擎表使用with query expansion进行全文搜索的最大匹配数,下面以一个例子来说明其作用。

参数 ft_query_expansion_limit 当前设置为 20:

当前表中相关的记录情况:

使用查询扩展的结果:

 

时间: 2024-09-21 00:23:32

RDS for MySQL 全文检索相关问题的处理的相关文章

RDS for MySQL Mysqldump 常见问题和处理

RDS for MySQL Mysqldump 常见问题和处理   GTID 特性相关 避免表级锁等待 设置导出字符集 其他导出时需要注意的选项 举例 RDS for MySQL 不支持的选项 RDS for MySQL 逻辑备份 1. GTID 特性相关 MySQL 5.6 引入了 GTID 特性,因此随 5.6 版本分发的 mysqldump 工具增加了 --set-gtid-purged 选项. # 选项名称 默认值 可选值 作用 1 set-gtid-purged AUTO ON, OF

RDS for MySQL 使用 utf8mb4 字符集存储 emoji 表情

RDS for MySQL 使用 utf8mb4 字符集存储 emoji 表情 1. 基本原则 2. 三个条件的说明 2.1 应用客户端 2.2 应用到 RDS MySQL 实例的连接 2.3 RDS 实例配置 3. 通过 set names 命令设置会话字符集 1. 基本原则 如果要实现存储 emoji 表情到 RDS for MySQL 实例,需要应用客户端.到 RDS for MySQL 实例的连接.RDS 实例内部 3 个方面统一使用或者支持 utf8mb4 字符集. 注:关于 utf8

RDS for MySQL InnoDB 行锁等待和锁等待超时的处理

RDS for MySQL InnoDB 行锁等待和锁等待超时的处理   1. InnoDB 引擎表行锁等待和等待超时发生的场景 2.InnoDB 引擎行锁等待情况的处理 2.1 InnoDB 行锁等待超时参数 innodb_lock_wait_timeout 2.2 大量行锁等待和行锁等待超时的处理 1. InnoDB 引擎表行锁等待和等待超时发生的场景 当一个 RDS for MySQL 连接会话等待另外一个会话持有的互斥行锁时,会发生 InnoDB 引擎表行锁等待情况. 通常情况下,持有该

RDS for MySQL 如何使用 Percona Toolkit

本期分享专家:田杰,专注在关系型数据库和NoSQL数据库技术领域,曾先后就职于路透社和渣打银行,目前在阿里云从事数据库技术支持工作,号称"数据库问题的终结者". Percona Toolkit 包含多种用于 MySQL 数据库管理的工具. 下面介绍常用的 pt-online-schema-change  和  pt-archiver 搭配 RDS MySQL 的使用方法. 注: pt-online-schema-change 和 pt-archiver 工具均须指定 --no-vers

RDS for MySQL 表上 Metadata lock 的产生和处理

RDS for MySQL 表上 Metadata lock 的产生和处理 1. Metadata lock wait 出现的场景 2. Metadata lock wait 的含义 3. 导致 Metadata lock wait 等待的活动事务 4. 解决方案 5. 如何避免出现长时间 Metadata lock wait 导致表上相关查询阻塞,影响业务 1. Metadata lock wait 出现的场景 创建.删除索引 修改表结构 表维护操作(optimize table.repair

slq server、oracle、mysql学习相关资料

问题描述 slq server.oracle.mysql学习相关资料 想学习数据库,有没有推荐slq server.oracle.mysql学习相关资料.书籍.网站 解决方案 51ctoverycd脚本之家verydemo这些网站有视频和资料,你可以自己进去找的: 如果回答对您有帮助请采纳 解决方案二: http://wenku.baidu.com/view/f3ac9d0b79563c1ec5da711d.html

RDS for MySQL查询缓存 (Query Cache) 的设置和使用

功能和适用范围 原理 限制 设置 验证效果 1. 功能和适用范围 功能: 降低 CPU 使用率 降低 IOPS 使用率(某些情况下) 减少查询响应时间,提高系统的吞吐量 适用范围: 表数据修改不频繁.数据较静态 查询(Select)重复度高 查询结果集小于 1 MB 注: 查询缓存并不一定带来性能上的提升,在某些情况下(比如查询数量大,但重复的查询很少)开启查询缓存会带来性能的下降. 2. 原理 RDS for MySQL 对来自客户端的查询(Select)进行 Hash 计算得到该查询的Has

RDS for MySQL 字符序(collation)引发的性能问题

在帮客户排查问题的时候,经常会遇到的 RDS 实例性能问题(比如 RDS 实例 CPU 使用率高),而其中有一类是由于字符集的字符排序规则不一致导致的.从处理的过程中可以看出来,这类问题比较容易出现但不容易定位排查,所以今天通过两个实战案例来分析的下"RDS for MySQL 字符序(collation)引发的性能问题". 首先介绍下背景知识: 字符集 和 字符序. 1. 字符集(character set)和字符序(collation) 字符集是一组符号和编码,用来保存和解释 My

RDS for MySQL CPU 性能问题浅析

RDS for MySQL CPU 性能问题浅析 1. 原因 1.1 应用负载高 1.2 查询执行成本高 2. 解决方法2.1 相关工具 2.2 应用负载高 2.3 查询语句执行成本高 3. 避免出现的一般原则 RDS for MySQL 实例在日常使用中,会碰到 CPU 使用率达到 100% 的情况.比如: 1. 原因 根本原因:应用提交的查询访问的 逻辑读(逻辑 IO) 总量 (需要访问的 表 数据) 过高. 大量逻辑读会导致数据缓存 Buffer Pool 中用于维护数据一致性的 Latc