由前面倒排索引延申过来,做一个学习记录,方便以后使用到对大规模文档的关键字搜索服务。
[toc]
前言
mysql索引类型
- primary 唯一索引,不允许为null
- NORMAL 普通非唯一索引
- UNIQUE 表示唯一的,不允许重复的索引,可以为null
- FULLTEXT 表示全文搜索的索引。 FULLTEXT用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的INDEX 也可以
- SPATIAL 只有MyISAM引擎支持,并且支持的不好。可以忽略
mysql索引方法
- HASH
- BTREE
全文索引
我们应用里面经常要用到搜索功能,一般简单的搜索功能我们使用MySQL的关键字Like实现模糊查询即可,但使用Like语句一般不会使用到索引,在数据量大的时候效率会大大降低,亦或我们需要全文搜索的时候,这个时候索引就变得特别重要。
MySQL支持三种模式的全文检索模式:
- 自然语言模式(IN NATURAL LANGUAGE MODE)
- 布尔模式(IN BOOLEAN MODE)
- 查询扩展模式 (WITH QUERY EXPANSION)
参考文档:
关于索引使用的注意事项
参考: mysql索引需要了解的几个注意
总结
关于一点,全文检索,对于我们需求,也就是刚开始提到的根据视频名称或文章名称模糊查询,有没有必要使用全文检索呢?
个人看法:
- 前期项目数据量不大,可以使用普通索引,like模糊查询解决
- 后期数据量上来了,可以自己去维护倒排索引,定时维护,查询去查倒排索引,至于分词可能有些疑惑
- 小规模文本(像文章名称这些),尽量避开全文索引,可能全文索引对大规模文本,效果较好
关于一个查询,可以引出一系列的知识点,这仅仅是大数据量查询的起点基础而已,后面还需要再进行知识的深入,基础知识只做备忘处理,关键在与后期在基础上的深入理解学习,才能达到融会贯通。