staffs表 建立一个 name age pos的组合索引。

全值匹配

和索引中所有的列进行匹配:explain select * from staffs where name='张三' and age=23 and pos ='dev';

匹配最左前缀

只匹配前面的几列。最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。

例如:b = 2 如果建立(a,b)顺序的索引,是匹配不到(a,b)索引的;但是如果查询条件是a = 1 and b = 2或者a=1(又或者是b = 2 and a = 1)就可以,因为优化器会自动调整a,b的顺序。再比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,因为c字段是一个范围查询,它之后的字段会停止匹配。

最左匹配原则都是针对联合索引来说的,所以我们有必要了解一下联合索引的原理,我们都知道索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个。构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树。

例子:假如创建一个(a,b)的联合索引,那么它的索引树是这样的

可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。所以b = 2这种查询条件没有办法利用索引,因为联合索引首先是按a排序的,b是无序的。同时我们还可以发现在a值相等的情况下,b值又是按顺序排列的,但是这种顺序是相对的。所以最左匹配原则遇上范围查询就会停止,剩下的字段都无法使用索引。例如a = 1 and b = 2 a,b字段都可以使用索引,因为在a值确定的情况下b是相对有序的,而a>1and b=2,a字段可以匹配上索引,但b值不可以,因为a的值是一个范围,在这个范围中b是无序的。

匹配列前缀

可以匹配某一列值的开头部分:

使用索引: explain select * from staffs where name like 'j%'  ;

索引失效: explain select * from staffs where name like '%j%'  ;

匹配范围值

可以查找某一范围的值:explain select * from staffs where name >'Mary'  ;

精确匹配某一列并范围匹配另外一列

可以查询第一列的全部和第二列的部分:explain select * from staffs where name='张三' and age > 23

只访问索引的查询

查询的时候只需要访问索引,不需要访问数据行,本质上就是索引覆盖。explain select name,age,pos from staffs where name='张三' and age=23 and pos ='dev';

mysql索引匹配方式相关推荐

  1. 关于MySQL索引知识与小妙招 — 学到了!

    一.索引基本知识 1.1 索引的优点 大大减少了服务器需要扫描的数据量,加快数据库的检索速度 帮助服务器避免排序和临时表 将随机io变成顺序io 1.2 索引的用处 速查找匹配WHERE子句的行 从c ...

  2. mysql 主表某一列 小于某一个表的两列之和_关于MySQL索引知识与小妙招

    1.1 索引的优点 大大减少了服务器需要扫描的数据量,加快数据库的检索速度 帮助服务器避免排序和临时表 将随机io变成顺序io 1.2 索引的用处 速查找匹配WHERE子句的行 从considerat ...

  3. MySQL索引类型(按数据结构分类)

    索引是在存储引擎中实现的,而不是在服务器层中实现的.所以,每种存储引擎的索引都不一定完全相同,并不是所有的存储引擎都支持所有的索引类型. 1.树索引 2.Hash索引 3.空间(R-Tree)索引 4 ...

  4. mysql json匹配key为数值_干货篇:一篇文章让你——《深入解析MySQL索引原理》

    概述 最近一段时间重新深入研究了一遍MySQL的内容,今天主要分享分析MySQL索引原理,后续会输出一些关于MySQL方面的干货,希望各位小伙伴喜欢. 一.什么是索引.为什么要建立索引? 关于索引的理 ...

  5. mysql 索引方法_mysql索引方式

    /* 所有MySQL列类型可以被索引.根据存储引擎定义每个表的最大索引数和最大索引长度. 所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节.大多数存储引擎有更高的限制. 索引的存储类型 ...

  6. mysql 联合索引结构与索引匹配原则

    联合索引结构与索引匹配原则 最左前缀匹配原则:在MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配. 要想理解联合索引的最左匹配原则,先来理解下索引的底 ...

  7. MySQL 索引方式

    2019独角兽企业重金招聘Python工程师标准>>> MySQL 索引方式 博客分类: 数据库 本文配图来自<高性能MySQL(第二版)>. 在数据库中,对性能影响最大 ...

  8. mysql 联合索引匹配原则

    读mysql文档有感 看了mysql关于索引的文档,网上有一些错误的博客文档,这里我自己记一下. 几个重要的概念 1.对于mysql来说,一条sql中,一个表无论其蕴含的索引有多少,但是有且只用一条. ...

  9. Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)

    了解了主键索引的底层原理,主键索引其实就是根据主键字段建立相关的数据结构(B+树),此后在使用主键字段作为条件查询时,会直接根据主键查找B+树的叶子结点.除了主键索引外,普通索引和唯一键索引也是如此, ...

最新文章

  1. 把项目放到码云上,通过git 进行项目管理
  2. 织梦在哪写html,织梦专题页去.html后缀的方法
  3. 如何造出逼真图像?南洋理工Zheng博士论文《基于深度生成学习的逼真图像合成》197页pdf阐述视觉合成工作...
  4. openstack 网络
  5. SAP OData服务性能测量的几种工具和手段
  6. linux命令行变大,Linux命令行下'!'的8大神奇的用法!
  7. http --- cookie与会话跟踪
  8. 图片上的文字怎么转换为word
  9. 前端学习(1933)vue之电商管理系统电商系统之优化树形控件
  10. linux启动http服务
  11. Win11设置定时关机命令没反应怎么办?
  12. 李白最经典的20首诗排行榜
  13. 【社会经验】如何高效的学习?
  14. 【愚公系列】2022年12月 使用win11系统自带SSH,远程控制VMware中Liunx虚拟机系统
  15. 弥散张量成像之DTI简介
  16. 豆瓣的开发语言:无所不能的python
  17. 基于ElasticsearchRepository进行简单封装实现非空更新,saveOrUpdate[笔记]
  18. python求素数(质数)及其优化
  19. --fiddler--实战--抓包到底干嘛用?
  20. 菜鸟收藏:什么是.rar文件?如何打开rar文件?_下载加速吧

热门文章

  1. eclipse新建类auther自填充
  2. 2020.10.29腾讯QQ音乐社招前端电话一面总结
  3. 计算机网恢,电脑附身
  4. 软考网络工程师如何复习?
  5. 解决git pull中 fatal: Not possible to fast-forward, aborting
  6. 二叉树的自下而上、从右到左的层次遍历算法实现
  7. 正则匹配以xx开头以xx结尾的单词
  8. 初始化k8s时,报错[kubelet-check] It seems like the kubelet isn‘t running or healthy.
  9. 10.2.2.7 -DHCP 和 DNS 服务
  10. 解决vue项目在ie浏览器中无法显示的问题,兼容低版本浏览器问题