覆盖索引与字段顺序有关吗?

zhu19774279 2015-04-17 09:03:36
假设我有一条查询语句,select col1, col2 from tb1 where col3='111',这时我创建一个(col1, col2, col3)的索引,一个(col3, col2, col1)的索引,对此次查询的帮助是否一样?
...全文
463 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
--船长-- 2016-03-29
  • 打赏
  • 举报
回复
补充下: 索引跟顺序有关,覆盖索引跟顺序无关 如: 最左列原则 说明 索引跟顺序有关 select a,b,c from table查询的结果 跟实际表中a,b,c的顺序无关,而覆盖索引只是在索引上包含了a,b,c的数据而已,无需再访问数据行,故而覆盖索引跟顺序无关
--船长-- 2016-03-29
  • 打赏
  • 举报
回复
引用 5 楼 zhu19774279 的回复:
今天看了另外一篇文章https://www.percona.com/blog/2015/04/27/indexing-101-optimizing-mysql-queries-on-a-single-table/,对覆盖索引和字段顺序有介绍。 依据上文,我得出以下推断: 假设表数据比较大且不能完全放入内存,而索引可以完全放入内存,则会有下面的情况:(col3, col2, col1)或(col3, col1, col2)都是覆盖索引,有最高的效率,但他俩之间并没有什么区别;(col3)的效率次之,因为只对col3条件有用,但是对col1、col2没用,(col3, col2)或(col3, col1)和(col3)效果一样,不过联合索引用不上,有点浪费,至于其他索引就不要考虑了。 不过以上只是根据老外的文章推断,还没有具体试验。
这个帖子快一年了,我也好长时间没在csdn上回复帖子了,今天来把这个帖子结了。 根据最左列原则,那么对于上述的sql,索引 (col3, col2, col1) 有效,另外一个无效。 索引(col3, col2, col1)的存储结构大概是这样的:col3,col2,col1,主键,where条件可以利用到col3,索引上正好有col1,col2数据,所以select col1,col2可以直接从索引上获取到col1,col2,所以这里是可以用到覆盖索引的。 同理如果创建索引(col3,col1,col2)也是满足覆盖所以条件的. 那么在什么情况下能使用到覆盖索引呢? where 条件 满足索引条件,必须所有条件都满足,select 查询的列必须也在索引上。 覆盖索引既索引上覆盖了select字段数据,查询时只要读取索引而无需访问数据行即可获得所有数据的索引
zhu19774279 2015-06-23
  • 打赏
  • 举报
回复
今天看了另外一篇文章https://www.percona.com/blog/2015/04/27/indexing-101-optimizing-mysql-queries-on-a-single-table/,对覆盖索引和字段顺序有介绍。 依据上文,我得出以下推断: 假设表数据比较大且不能完全放入内存,而索引可以完全放入内存,则会有下面的情况:(col3, col2, col1)或(col3, col1, col2)都是覆盖索引,有最高的效率,但他俩之间并没有什么区别;(col3)的效率次之,因为只对col3条件有用,但是对col1、col2没用,(col3, col2)或(col3, col1)和(col3)效果一样,不过联合索引用不上,有点浪费,至于其他索引就不要考虑了。 不过以上只是根据老外的文章推断,还没有具体试验。
--船长-- 2015-04-27
  • 打赏
  • 举报
回复
最左列原则 对于select col1, col2 from tb1 where col3='111'这样的sql一般没必要利用覆盖索引,除非返回的数据行比较多
rucypli 2015-04-27
  • 打赏
  • 举报
回复
(col3, col2, col1)的索引对col3有用
zhu19774279 2015-04-27
  • 打赏
  • 举报
回复
引用 2 楼 loujinhe 的回复:
最左列原则 对于select col1, col2 from tb1 where col3='111'这样的sql一般没必要利用覆盖索引,除非返回的数据行比较多
最左列原则我是知道的,只是从《Effective MySQL之SQL语句最优化》对覆盖索引的描述(http://book.2cto.com/201212/11344.html),和最左列原则似乎有很大差别。
ACMAIN_CHM 2015-04-17
  • 打赏
  • 举报
回复
(col1, col2, col3) 基本不起作用,除非某些特例下会有用。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧