2.4.全文索引

查询操作在数据量比较少时,可以使用like模糊查询,但是对于大量的文本数据检索,效率很低。如果使用全文索引,查询速度会比like快很多倍。在MySQL 5.6 以前的版本,只有MyISAM存储引擎支持全文索引,从MySQL5.6开始MyISAM和InnoDB存储引擎均支持。

创建全文索引的方法如下:

CREATE FULLTEXT index 索引名 on 表名(字段名);  -- 默认只能进行英文的模糊查询
CREATE FULLTEXT index 索引名 on 表名(字段名) with parser ngram;  -- 带有中文分词器的全文索引,ALTER TABLE 表名 ADD FULLTEXT [索引的名字] (字段名);
CREATE TABLE 表名 ( [...], FULLTEXT KEY [索引的名字] (字段名) ;
-- 例如:
CREATE FULLTEXT index index_student_name on student(student_name) with parser ngram;

和常用的like模糊查询不同,全文索引有自己的语法格式,使用 match 和 against 关键字,比如

select * from user
where match(name) against('aaa');

2.4.1.实例

无索引 查询 student_name(姓名) = ‘%东方%’ 的记录, 用时 4244 ms

注意这里 查询 没有分页

 Consume Time:4244 ms 2022-10-26 22:04:53Execute SQL:select student_id,student_name,student_enrollmenttime, student_tel,stu.education_id,student_weight, student_bloodtype,student_sex , student_height , edu.education_name , case student_sex when 1 then '男' when 0 then '女' else '不清楚' end student_sex_name from student stu left join education edu on stu.education_id = edu.education_id
WHERE student_name like concat('%', '东方' ,'%')

2.4.1.1.创建索引

CREATE FULLTEXT index index_student_name on student(student_name) with parser ngram;

成功 : 用时 23.886s

[SQL]CREATE FULLTEXT index index_student_name on student(student_name) with parser ngram;
受影响的行: 0
时间: 23.886s

2.4.1.2.修改查询语句

select * from student
where match( student_name ) against( '东方' );

2.4.1.3.再测试

查询 , 用进 60 ms

 Consume Time:60 ms 2022-10-26 22:14:39Execute SQL:select student_id,student_name,student_enrollmenttime, student_tel,stu.education_id,student_weight, student_bloodtype,student_sex , student_height , edu.education_name , case student_sex when 1 then '男' when 0 then '女' else '不清楚' end student_sex_name from student stu left join education edu on stu.education_id = edu.education_idWHERE match( student_name ) against( '东方' )

2.4.2.分词设置

使用全文索引一定要注意中文分词的个数, 默认的个数是2, 即模糊查询的字符串必须是2个字以上.

打开mysql安装目录, 找到my.ini文件, 修改分词个数的属性即可

ngram_token_size=2

修改完毕后,需要重新启动mysql服务.

中文分词器的原理

例如: “新年快乐”, 如果安装不同的分词个数拆字的话,如下

分词个数为2 新年 年快 快乐
分词个数为3 新年快 年快乐
分词个数为4 新年快乐

如果分词个数为2, 所以模糊查询中,带有"新年", “年快”, "快乐"的都是结果

项目里应该如何实用全文索引

<if test="studentName != null and studentName != '' and studentName.length == 1">and student_name like concat('%',#{studentName},'%')
</if>
<if test="studentName != null and studentName != '' and studentName.length > 1">and match(student_name) against(#{studentName})
</if>

数据库索引 ( 三 ) MySQL全文索引相关推荐

  1. MySQL数据库实验三 MySQL查询

    一.实验项目: MySQL查询. 二.实验目的 掌握MySQL的查询操作. 三.实验内容 (一): 1.查询lineitem表中商品编号(productid)和单价(unitprice),要求消除重复 ...

  2. mysql 节点查根_(三)B数、B+树及在数据库索引中应用

    在算法逻辑上,二叉树的查找效率和比较次数都是最小的,但是在实际问题中,还要考虑磁盘IO. 数据库索引是存储在磁盘上的,当数据量比较大时,索引可能几个G. 当我们利用索引查询的时候,不能将整个索引全部加 ...

  3. 大于小于优化_以MySQL为例,详解数据库索引原理及深度优化

    本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接. 一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引 ...

  4. MySQL(三)MySQL索引原理

    数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询.更新数据库表中数据.                                                    ...

  5. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  6. mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接

    在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引(MyISAM 表)和R-Tree索引,本文讲的是B-Tree索引. 一.Mysql索引主要有两种结构 ...

  7. 大于小于优化_架构 - 以MySQL为例,详解数据库索引原理及深度优化

    一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如 ...

  8. Mysql数据库索引原理及算法原理

    前言 面试的时候总会被提及一些关于数据库操作的问题,那么数据库索引作为一项热门问题,总会被问到.最近在网上看到了一篇关于mysql数据库索引的好文章,认真看完之后肯定受益匪浅,(虽说有的地方我不太理解 ...

  9. mysql gis index 索引原理_从原理到优化,深入浅出数据库索引

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 数据库查询是数据库的最主要功能之一,我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的 ...

最新文章

  1. 2014年02月16日
  2. easyui前端实现多选框_前端:Element UI 多选框组用法笔记
  3. sessionCreated一直调用
  4. C语言实验大纲2010答案,C语言试验大纲(2010年修订).doc
  5. python课程费用-上海Python数据分析课程
  6. matlab改变图形窗口命名
  7. java web 加载类_Tomcat类加载机制
  8. TCP状态转移:有限状态机
  9. 爬虫实战—模拟登陆oschina
  10. MySQL:BlackHole
  11. ftp协议是一种用于什么的协议_购房协议怎么写?签购房协议要注意什么
  12. redis集群搭建管理入门
  13. Java中XML运用总结
  14. 目前 计算机硬件系统,计算机硬件系统练习题.doc
  15. Python:dbus监控U盘插拔
  16. CVE-2018-4990 漏洞详情分析
  17. 快递取件码生成软件_一种分布式的取件码生成方法技术
  18. 独家 | 中国科学院郭爱克院士:人类大脑在整体上是怎样工作的?
  19. 产品人的归宿 · 之 · (22条)咨询的奥秘
  20. python什么是入口文件_小问题大隐患:如何正确设置 Python 项目的入口文件?

热门文章

  1. 登录校验之滑块验证码完整实现(vue + springboot)
  2. C语言sizeof是关键字还是函数?
  3. meta name=viewport content=width=device-width, initial-scale=1.0, user-scalable=no, minimum-scal
  4. 判断手机号码归属地的正则表达式
  5. 其他手机怎么安装鸿蒙系统,国内其它的手机厂家不想安装鸿蒙吗?
  6. 桌面图标的文字背景色如何恢复为透明
  7. 国内的生物信息学会议
  8. 浙江农业商贸职业学院计算机专业分数线,浙江农业商贸职业学院
  9. python3基础知识复习 -- 虚拟环境(conda VS venv)
  10. 小米10s和小米11参数配置对比哪个好 哪个更值得入手