mysql索引之最左前缀法则

摘要:
1: 最左边的前缀规则如果您的索引有多个字段,如图1所示,那么索引字段有kq_time、card_no、kq_type这三个字段(最左边前缀根据三个字段的顺序排序)。如果使用了三个查询条件中的三个字段,如图2所示(严格遵循最左前缀原则,查询条件序列使用三个字段(kq_time、card_no、kq_type)。如图2所示,使用了所有索引,并使用了三个字段的索引,key_LEN的长度为165。查看图片

1:最左前缀法则

  如果你的索引有多个字段,如图1所示,索引字段有 kq_time, card_no, kq_type这三个字段(最左前缀就是按这三个字段的前后顺序进行排序的)

mysql索引之最左前缀法则第1张

 如果是三个查询条件中三个字段都用到了,如图二(严格按照最左前缀原则,查询条件顺序是使用了三个字段(kq_time,card_no,kq_type)

mysql索引之最左前缀法则第2张

 这是图二是使用了全部索引,三个字段的索引都用到了,key_len的长度是165,看图三每个字段对应的长度,kq_time的类型是datetime长度是8,card_no的类型是varchar长度是50,kq_type的类型是varchar长度是1,所有总长度是8+(50*3+2)+(1*3+2)=165(这个值是预估值,有时候不准确,下面就会出现此情况),所以所有的索引都走了,索引长度计算看图三

 mysql索引之最左前缀法则第3张

下面的图四,遵守了最左前缀原则,都走了部分索引kq_time(遵守了最左前段法则,查询条件顺序kq_time)

mysql索引之最左前缀法则第4张

 再看图五,走了部分索引kq_time和card_no(遵守了最左前段法则,查询条件顺序kq_time和card_no)

mysql索引之最左前缀法则第5张

图六 (没有遵守最左前缀原则,查询条件跳过kq_time字段,使用了后面的两个字段,所有不走索引)

mysql索引之最左前缀法则第6张

图七(遵守了最左前缀原则,kq_time有了,后面没有card_no,直接使用了kq_type,所有索引只走了kq_time)

mysql索引之最左前缀法则第7张

 mysql索引之最左前缀法则第8张

 在最后,总结一下什么最左前缀原则:查询从索引的最左前列开始并且不跳过索引中的列,通俗易懂的来说就是:带头大哥不能死、中间兄弟不能断

免责声明:文章转载自《mysql索引之最左前缀法则》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xxl-job安装部署文档EasyUI的属性、事件、方法的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL 8.0.14版本新功能详解

点击▲关注 “数据和云”   给公众号标星置顶 更多精彩 第一时间直达 作者:崔虎龙,云和恩墨-开源架构部-MySQL技术顾问,长期服务于数据中心(金融,游戏,物流)行业,熟悉数据中心运营管理的流程及规范,自动化运维 等方面。擅长MySQL,Redis,MongoDB 数据库高可用设计 和 运维故障处理,备份恢复,升级迁移,性能优化 。 MySQL已进...

单表60亿记录等大数据场景的MySQL优化和运维之道

前言 MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视。 MySQL历史 1979年,Monty Widenius写了最初的版本,96年发布1.0 1995-2000年,MySQL AB成立,引入BDB 2000年4月,集成MyISAM和replication 2001年,Heikki Tuuri向M...

python连接mysql的驱动

对于py2.7的朋友,直接可以用MySQLdb去连接,但是MySQLdb不支持python3.x。这是需要注意的~ 那应该用什么python连接mysql的驱动呢,在stackoverflow上有人解答: (1)可以尝试使用PyMySQL,但它很慢,最新的版本可以支持python 3.4. 地址:http://www.pymysql.org/ (2)还可以...

MySQL集群常见高可用方案(转)

1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。 当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺...

mysql增删改和学生管理sql

importpymysql #2.建连 conn = pymysql.connect("localhost","root",'root','李森') print(conn) #3.获取游标 cur =conn.cursor() #4.增 sql="insert into student_1 values(default,%s,%s,%s,%s)"cur.e...

解决MySQL数据库同步1236错误

1、报错如下: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged bin...