MySQL全文索引使用注意事项

前文我做了mysql全文性能测试,测试中发现使用MySQL全文索引的一些注意事项,特此记录分享。

配置

my.cnf配置(配置完了别忘了重启mysql)如下:

[mysqld]
#英文分词长度默认为4,<4通常不建索引;英文单词长度<4的通常查询不到
ft_min_word_len = 4  
 #中文分词长度位2,每个字都可以查出
ngram_token_size=2

增加全文索引

增加全文索引:
alter table table_name add fulltext index idxName(column1,…);
alter table table_name add fulltext index idxName(column1,…) with parser ngram; – 使用中文分词

全文检索模式

常用的全文检索模式有两种:
2.1 自然语言模式(NATURAL LANGUAGE MODE) ,
自然语言模式是MySQL 默认的全文检索模式。自然语言模式不能使用操作符,不能指定关键词必须出现或者必须不能出现等复杂查询。
2.2 BOOLEAN模式(BOOLEAN MODE)
BOOLEAN模式可以使用操作符,可以支持指定关键词必须出现或者必须不能出现或者关键词的权重高还是低等复杂查询。
BOOLEAN模式下运算符的使用方式:
‘apple banana’ 无操作符,表示或,要么包含apple,要么包含banana
‘+apple +juice’ 必须同时包含两个词
‘+apple macintosh’ 必须包含apple,但是如果也包含macintosh的话,相关性会更高。
‘+apple -macintosh’ 必须包含apple,同时不能包含macintosh。
‘+apple ~macintosh’ 必须包含apple,但是如果也包含macintosh的话,相关性要比不包含macintosh的记录低。
‘+apple +(>juice <pie)’ 查询必须包含apple和juice或者apple和pie的记录,但是apple juice的相关性要比apple pie高。
‘apple*’ 查询包含以apple开头的单词的记录,如apple、apples、applet。
‘“some words”’ 使用双引号把要搜素的词括起来,效果类似于like ‘%some words%’,即把引号内的内容做一个完整匹配。例如“some words of wisdom”会被匹配到,而“some noise words”就不会被匹配。

使用注意事项

1、 只能在类型为CHAR、VARCHAR或者TEXT的字段上创建全文索引。
2、 全文索引只支持InnoDB和MyISAM引擎。
3、 MATCH (columnName) AGAINST (‘keywords’)。MATCH()函数使用的字段名,必须要与创建全文索引时指定的字段名一致。如上面的示例,MATCH (title,body)使用的字段名与全文索引ft_articles(title,body)定义的字段名一致。如果要对title或者body字段分别进行查询,就需要在title和body字段上分别创建新的全文索引。
MATCH()函数使用的字段名只能是同一个表的字段,因为全文索引不能够跨多个表进行检索。
4、 如果要导入大数据集,使用先导入数据再在表上创建全文索引的方式要比先在表上创建全文索引再导入数据的方式快很多,所以全文索引是很影响TPS的。
5、 如果不是英文单词,是字符串,用串中子字符串查不到(同分词长度有一定关系);但如果串中是用空格、‘,’,‘,’,';'等符号隔开,则可以查询;举例如下:
'304402207854CD95FFCE01D6A211CEAEDA0057007FCE61AD789F73C1BAABAA1283E1DCDE02201DA1B56B1A812EC7D4DCFEDE8D761B429197E77E72E8F6A745A8E7421EC10D34’ 查’0220’是查不到的
'3044 0220,7854CD95FFCE01D6A211CEAEDA0057007FCE61AD789F73C1BAABAA1283E1DCDE02201DA1B56B1A812EC7D4DCFEDE8D761B429197E77E72E8F6A745A8E7421EC10D34’ 查’0220’则可查到
6、如果一个字段中英文混合,用英文模式建,默认单词长度位4。查中文要求:查询内容3个字或以上,且是单独句型,前后用语法分隔符分隔的;用中文模式建,英文查找慢,且结果不正确,匹配项大量增加
7、 多字段共建成一个全文索引,则存储少,但查询速度慢。
8、 多字段共建成一个全文索引,如果中英文混合,按英文模式建,中文(查询内容3个字或以上,且是单独句型,前后用语法分隔符分隔的);按中文模式建,中文查找模式准确,也快,但英文查找慢且匹配项大量增加
9、设计建议:
9.1 一个表最好只有一个全文索引字段;
9.2 字段内容最好是全英文或全中文。

我做的mysql全文性能测试,见链接:Mysql全文索引性能测试对比

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL 的索引是一种数据结构,用于提高数据库查询的效率。使用索引可以快速定位到特定的数据行,而不必扫描整个数据表。下面是关于 MySQL 索引使用的一些常见问题和注意事项: 1. 什么是索引? 索引是按照一定的规则对表中的数据进行排序和组织的数据结构,以加快对数据的检索速度。它类似于书籍的目录,可以根据关键字快速找到所需的内容。 2. 如何创建索引? 在创建表时,可以指定某些列作为索引列。可以使用 CREATE INDEX 或 ALTER TABLE 命令来创建索引,也可以在创建表时使用 PRIMARY KEY 或 UNIQUE 约束来自动创建索引。 3. 为什么要使用索引? 使用索引可以大大提高查询的速度,尤其是在数据量较大时。它可以减少数据库查询操作需要扫描的数据量,从而缩短查询的响应时间。 4. 索引的类型有哪些? MySQL 支持多种类型的索引,包括主键索引、唯一索引、普通索引、全文索引等。每种类型的索引都有自己的应用场景和使用注意事项。 5. 如何选择合适的列创建索引? 通常情况下,选择经常被查询条件使用的列或者经常用于连接的列来创建索引是比较有效的。但是过多的索引也会增加数据更新的开销,因此需要根据实际情况进行权衡和选择。 6. 索引的优缺点是什么? 索引可以提高查询性能,但同时也会增加数据库的存储空间和维护成本。过多或不合理的索引可能导致查询性能下降、数据更新变慢等问题。因此,在创建索引时需要谨慎考虑。 这是一些关于 MySQL 索引使用的基本信息,如果你有具体的问题或者需要更详细的讨论,请提供更多上下文。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值