mysql 组合索引最左匹配原因,数据库索引最左匹配原则

mysql 组合索引最左匹配原因,数据库索引最左匹配原则,深入浅析Mysql联合索引最左匹配原则

本文主要介绍Mysql联邦索引的最左匹配原理,使用联邦索引有很多好处。请跟随我们的边肖了解详情。

前言

之前在网上看过很多关于mysql联合索引最左前缀匹配的文章,我想我知道它的原理。最近面试的时候和面试官交流,发现少了点什么。在这里,我自己来梳理一下这方面。

最左前缀匹配原则

Mysql在建立联邦索引时会遵循最左侧前缀匹配的原则,即先从最左侧开始,检索数据时从联邦索引的最左侧开始匹配。例如:

为列col1、列col2和列col3建立联合索引。

关键test_col1_col2_col3 on test(col1,col2,col 3);

联合索引test_col1_col2_col3实际上建立了三个索引(col1)、(col1,col2)和(col2,col3)。

SELECT * FROM test WHERE col 1=" 1 " AND clo 2=" 2 " AND clo 4=" 4 "

上面的查询语句将按照最左前缀匹配原则执行,检索时将使用索引(col1,col2)进行数据匹配。

注意

索引的字段可以按任何顺序排列,例如:

SELECT * FROM test WHERE col 1=" 1 " AND clo 2=" 2 "

SELECT * FROM test WHERE col 2=" 2 " AND clo 1=" 1 "

两个查询语句都将使用索引(col1,col2)。mysql创建联合索引的规则是先对最左边联合索引的数据即第一个字段col1进行排序,然后在第一个字段的基础上对第二个字段col2进行排序。实际上,它相当于实现了一个类似order by col1 col2的排序规则。

有人奇怪第二条查询语句不匹配最左边的前缀:首先,可以肯定的是两条查询语句都保证了索引中的col1和col2字段(col1,col2),只是顺序不同,查询条件相同,最终查询结果肯定是一样的。既然结果相同,那么按什么顺序查询才是最好的查询方式呢?此时,我们可以使用mysql查询优化器explain,它会以最高的效率修正sql语句应该执行的顺序,最终生成真正的执行计划。

为什么要使用联合索引

减少开销。构建一个联合索引(col1,col2,col3),实际上相当于构建三个索引(Col1),(Col1,Col2)和(Col1,Col2,Col3)。每个额外的索引都会增加写入和磁盘空间的开销。对于有大量数据的表,使用联邦索引会大大减少开销!

覆盖索引。对联合索引(col1,col2,col3),如果有以下SQL: select col1,col2,col3 from test where col1=1,col2=2。那么MySQL就可以通过遍历索引直接获取数据,而不需要返回表,减少了大量的随机io操作。减少io操作,尤其是随机io,其实是dba的主要优化策略。因此,在实际应用中,覆盖指数是提高性能的主要优化方法之一。

效率高。索引中的列越多,通过索引过滤的数据就越少。一个有1000W数据的表有以下SQL: select from table其中col1=1,col2=2,col3=3,假设每个条件可以筛选出10%的数据。如果只有一个单值指标,那么可以通过这个指标筛选出1000W10%=100w的数据,然后从100w的数据中找到符合col2=2和col3=3的数据。如果是联合索引,通过索引筛选出1000w10% 10% *10%=1w,效率提升可想而知!

引申

对于联合索引(col1,col2,col3),查询语句SELECT * FROM test,其中col2=2指数可以触发吗?

大多数人会说不是,其实是是的。

原因:

解释SELECT * FROM test,其中col2=2

解释SELECT * FROM test,其中col1=1

观察上面两个解释结果中的类型字段。这些查询是:

类型:索引

类型:参考

Index:这种类型表示mysql将扫描整个索引。如果要使用这种类型的索引,对这种索引没有特殊要求。只要是索引或者是联合索引的一部分,mysql都可能按索引类型扫描。但是缺点是效率不高。mysql会从索引中的第一个数据开始逐个查找最后一个数据,直到找到满足判断条件的索引。因此,上述语句将触发索引。

Ref:这种类型表示mysql会根据特定的算法快速找到某个符合条件的索引,而不是对索引中的每一个数据逐一扫描判断。也就是说,您通常理解使用索引查询将更快地获取数据。但是,为了实现这种搜索,需要索引。为了实现这种快速搜索算法,索引必须满足特定的数据结构。简单地说,索引字段中的数据必须是为了实现这种类型的搜索和利用索引。

总结

以上是边肖介绍的Mysql联合索引最左匹配原则。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些
  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些,关系型数据库与非关系型数据库简介
  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 什么是分库分表,为什么要进行分库分表-,分库分表的区别,数据库分库分表是什么,什么情况下需要用分库分表
  • vb中adodb连接数据库,
  • treeview控件绑定数据,wpf treeview数据绑定,详解TreeView绑定数据库
  • sql的多表查询,数据库如何实现多表查询
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库,SQLServer2019 数据库的基本使用之图形化界面操作的实现
  • sql数据库定时备份怎么弄,mysql 定期备份
  • sql数据库定时备份怎么弄,mysql 定期备份,MySQL 数据库定时备份的几种方式(全面)
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar,SQL中varchar和nvarchar的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: