MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,以最左边的为起点任何连续的索引都能匹配上,同时遇到范围查询(>、<、between、like)就会停止匹配。。

我先说一下,我从看来的文章里理解的内容。

  • 例如,我创建了一张表,有A、B、C三个属性。我们在此基础上创建联合索引(A、B、C),实际上这是创建了三个索引,(A)(A、B)(A、B、C)。我们通过索引查询的时候,就可以查(A=?、B=?),Sql语言甚至有自动检测功能,当你输入的顺序不是按照索引的顺序时,例如,(B=?,A=?,C=?),这也是可以按照索(A、B、C)引来进行查找的。但是如果是查找(B=?,C=?)的时候,这时用的不是创建的索引(A、B、C),而是全索引,这是跟它的底层原理相关的,下面再谈。如果又有一个查询(A、B、C),不过B是范围查找的话,索引也只到A、B,因为B是范围查找,后面的字段就会停止匹配。

从上面可以看出最左前缀原则是在检索数据时按照规定的索引顺序来的。

这里有一片文章,介绍的比较详细,大家可以去看看。文章中有实例的测试,更加详细。
文章链接

底层原理

首先要知道,最左前缀原则是针对联合索引的,索引就要知道联合索引的实现原理。
它的底层是一个B+树,但键值数是大于1的。而构建一个B+树就只能根据一个键值来进行,所以数据库依据联合索引最左的字段来构建B+树。

下面是一个(A、B)的联合索引。

可以看到A是有顺序的,但是B不是,B的顺序是建立在A的基础上的。所以最左前缀原则是根据索引先匹配A,在匹配B。如果没有A,直接查找B的话,这就用不到(A、B)索引,而是全索引。

MySQL 最左前缀原则相关推荐

  1. mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...

    什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...

  2. MySQL 覆盖索引、最左前缀原则、索引下推

    1.覆盖索引 1.1 概念 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了.如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引 ...

  3. mysql索引优化原则:覆盖索引、最左前缀原则、索引下推

    文章目录 前言 round1:覆盖索引 round2:最左前缀原则 round3:索引下推 小结 前言 在文章开始前,小编提出几个问题,读者可以思考一下如何回答.如果对于以下的问题,回答的模棱两可甚至 ...

  4. 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“

    04 | 深入浅出索引(上) 1. 什么是索引? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,书有500页,每页存的都是书的内容,目录可能只有5页,只存了页码:通过目录能快速找到某个主 ...

  5. mysql索引最左前缀原则

    mysql索引最左前缀原则 创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三, ...

  6. 【MySQL】索引原理(三):联合索引(最左前缀原则),覆盖索引,索引条件下推

    准备工作,下面的演示都是基于user_innodb表: DROP TABLE IF EXISTS `user_innodb`; CREATE TABLE `user_innodb` (`id` big ...

  7. 【MySQL】索引优化中的最左前缀原则和索引下推

    目录 一.引入 二.覆盖索引 ​ 讲接下来的问题前首先讲一下联合索引的底层存储结构长什么样?联合索引的检索过程是什么样的呢? 三.最左前缀原则 最左前缀原则的定义 四.索引下推 五.小结 一.引入 在 ...

  8. 数据库性能优化1——正确建立索引以及最左前缀原则

    1. 索引建立的原则 用于索引的最好的备选数据列是那些出现在WHERE子句.join子句.ORDER BY或GROUP BY子句中的列. 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是 ...

  9. 我去,为什么最左前缀原则失效了?

    问题 最近,在 mysql 测试最左前缀原则,发现了匪夷所思的事情.根据最左前缀原则,本来应该索引失效,走全表扫描的,但是,却发现可以正常走索引. 表结构如下( Mysql 版本 5.7.22): C ...

最新文章

  1. 使用MATLAB实现的小算法练习1
  2. Meta小冰英伟达一起搞事!亚洲首个元宇宙生态联合体来了
  3. ABP vNext微服务架构详细教程——分布式权限框架(上)
  4. ImportError: dynamic module does not define module export function (PyInit__caffe)
  5. sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行
  6. 利用jquery修改elment的自定义组件多选框el-select(修改多选框的颜色)
  7. php 函数封装上传,PHP(多)文件上传实现和函数封装
  8. Python 爬虫利器一之 Requests 库的用法
  9. c++ mysql 操作_c++操作mysql入门详解
  10. Springboot07配制数据统一返回格式以及定义统一的异常处理类
  11. 不用到处找图标了!模库承包你所有的图标素材!
  12. CPU合并写缓冲区简介
  13. python基础--导入模块
  14. spring mvc 简单的文件上传与下载
  15. 【接力题典1800记录】定积分
  16. 房价必然上涨的N个原因
  17. 路由器的四种配置模式
  18. 电商客服售前售后话术培训资料合集(共150份)
  19. 用C#开发一个 DNF文字版 【一】
  20. 为什呢vue组件中的data必须是函数?

热门文章

  1. jsonp原理详解——终于搞清楚jsonp是啥了,rabbitmq原理总结
  2. 使用Flutter开发的一款仿Gitme的客户端
  3. 3·15特辑|你身边的假人工智能
  4. speeding up your web site 前端性能优化规则(一)
  5. java,jdk 分不清,是否免费,怎么选择合适的版本
  6. 背单词第二天重新认识字母a和alphabet
  7. 2020-2024年全球多模光纤市场复合年增长率约16%
  8. shell 脚本比较字符串相等_shell判断字符串相等脚本
  9. 多元生态布局,天九共享保障联营企业家收益
  10. 网络协议:简析三次握手协议