星空网 > 软件开发 > 数据库

MySQL的loose index scan

    众所周知,InnoDB采用IOT(index organization table)即所谓的索引组织表,而叶子节点也就存放了所有的数据,这就意味着,数据总是按照某种顺序存储的。所以问题来了,如果是这样一个语句,执行起来应该是怎么样的呢?语句如下:

    

select count(distinct a) from table1;

     列a上有一个索引,那么按照简单的想法来讲,如何扫描呢?很简单,一条一条的扫描,这样一来,其实做了一次索引全扫描,效率很差。这种扫描方式会扫描到很多很多的重复的索引,这样说的话优化的办法也是很容易想到的:跳过重复的索引就可以了。于是网上能搜到这样的一个优化的办法:

    

select count(*) from (select distinct a from table1) t;

    从已经搜索到的资料看,这样的执行计划中的extra就从using index变成了using index for group-by。

    但是,但是,但是,好在我们现在已经没有使用5.1的版本了,大家基本上都是5.5以上了,这些现代版本,已经实现了loose index scan:

    MySQL的loose index scan

     很好很好,就不需要再用这种奇技淫巧去优化SQL了。

     文档里关于group by这里写的有点意思,说是最大众化的办法就是进行全表扫描并且创建一个临时表,这样执行计划就会难看的要命了,肯定有ALL和using temporary table了。

     深刻的感觉这一篇写起来有好多写的,周末再更吧,我要早早睡觉去。




原标题:MySQL的loose index scan

关键词:MYSQL

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

东南亚电商双雄竞争激烈,Lazada增长速度稍逊一筹:https://www.goluckyvip.com/news/3477.html
第一次经历旺季就神操作,新锐3C卖家这招“绝杀”东南亚:https://www.goluckyvip.com/news/3478.html
东南亚电商之争胜负已分,Lazada首次数据披露:https://www.goluckyvip.com/news/3479.html
加拿大出台新规,海运整箱货物出EBL或者SWB或将失去货物控制权:https://www.goluckyvip.com/news/348.html
Shopee大件渠道订单未在规定时间内入仓,将被取消:https://www.goluckyvip.com/news/3480.html
法国物流商Asendia:https://www.goluckyvip.com/news/3481.html
2024.04.18亚马逊选品推荐(仅供参考):女装蛋糕连衣裙:https://www.kjdsnews.com/a/1842234.html
欧洲市场疯了,订单排到7、8月!:https://www.kjdsnews.com/a/1842235.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流