mysql组合索引之最左原则

 为什么在单列索引的基础上还需要组合索引?  

  select product_id from orders where order_id in (123, 312, 223, 132, 224);

    我们当然每个字段都可以创建索引 在不建立组合索引的前提下 mysql只会用到其中一个最有效率的索引 ,效率平庸

    但当我们建了组合索引后 (Btree索引结构下)当我们建立了组合索引prodect_id,order_id后像上面的语句  我们可以直接根据order_id查找到
product_id,不用再取文件中取product_id

组合索引的最左原则是什么?

      组合索引,其实是相当于分别建立了下面三组组合索引:
  1. usernname,city,age  
  2.  
  3. usernname,city  
  4.  
  5. usernname  
为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:
  1. SELECT * FROM mytable WHREE username="admin" AND city="郑州" 
  2.  
  3. SELECT * FROM mytable WHREE username="admin" 
而下面几个则不会用到:
  1. SELECT * FROM mytable WHREE age=20 AND city="郑州" 
  2.  
  3. SELECT * FROM mytable WHREE city="郑州" 

posted @   陶朱公Boy  阅读(5022)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示