联合索引最左匹配原则的成因+索引为什么不是越多越好

本文深入探讨了数据库中联合索引的概念及其工作原理,重点讲解了最左匹配原则,即当查询条件从索引的最左列开始时,索引才能被有效利用。此外,还分析了为何直接使用联合索引的非首字段查询时无法利用索引,以及索引并非越多越好的原因。

联合索引

多列组成的索引

最左匹配原则

假设我们有两列a,b,a和b是联合索引,他的顺序是a,b,我们在where语句中调用a=? and b=?的时候就会走联合索引,如果调用where a = ?的时候也会走索引,但是当我们使用where b = ?的时候就不会走这个联合索引

成因:

mysql创建复合索引的规则是首先会对复合索引的最左边,也就是索引中的第一个字段进行排序,在第一个字段排序的基础上,在对索引上第二个字段进行排序,其实就像是实现类似order by 字段1,字段2这样的排序规则,那么第一个字段是绝对有序的,而第二个字段就是无序的了,因此一般情况下直接只用第二个字段判断是用不到索引的,这就是为什么mysql要强调联合索引最左匹配原则的原因。

 索引是键的越多越好吗?

答案是否定的

  • 数据量小的表不需要建立索引,建立会增加额外的索引开销
  • 数据变更需要维护索引,意味着更多的索引意味着更多的维护成本
  • 更多的索引也需要跟多的存储空间

 

遵循最左匹配原则的原因是因为在MySQL中,当使用联合索引进行查询时,最左匹配原则可以最大限度地利用索引的效果,提高查询性能。 最左匹配原则指的是在进行查询时,MySQL会从联合索引的最左边的列开始匹配,只有当查询条件中的列与联合索引的最左边的列完全匹配时,才会使用索引进行查询。如果查询条件中的列不是联合索引的最左边的列,那么MySQL将无法使用该索引进行查询。 这是因为联合索引的数据结构是一个树状结构,每一层都包含了索引的一部分信息。当查询条件中的列与索引的最左边的列不完全匹配时,MySQL无法直接在树状结构中定位到对应的数据,而只能遍历整个索引树,这样就会降低查询效率。 通过遵循最左匹配原则,可以使MySQL在查询时尽可能使用索引,减少全表扫描的开销,提高查询速度。因此,设计合适的联合索引并遵循最左匹配原则对于提高数据库性能非常重要。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [最左匹配原则及其成因](https://blog.youkuaiyun.com/qq_37768971/article/details/100026327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [MySQL数据库索引最左匹配原则(一)概述](https://blog.youkuaiyun.com/weixin_50966947/article/details/126146424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [深入浅析Mysql联合索引最左匹配原则](https://download.youkuaiyun.com/download/weixin_38689976/13699343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值