发现一个很奇怪的问题。mysql中explain的type index效率比range高

大肠猴 2019-09-27 05:13:53
表结构:

sql:
SELECT vod_id FROM `ia_comment` where vod_id>0 and account_id=88;
SELECT vod_id FROM `ia_comment` where account_id=88;
结果:
[SQL]SELECT vod_id FROM `ia_comment` where vod_id>0 and account_id=88;
受影响的行: 0
时间: 0.323s

[SQL]
SELECT vod_id FROM `ia_comment` where account_id=88;
受影响的行: 0
时间: 0.152s


为什么第二条sql扫描的rows多效率反而更高
两条sql得到的数据是一样的
vod_id 全部大于0
...全文
1398 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜕变之痛 2019-10-08
  • 打赏
  • 举报
回复
注意key_len:
第一条SQL是4,说明只用到了联合索引的第一个列vod_id,所以vod_id这个索引只用于vod_id>0的筛选,从索引读取数据之后,还要进行account_id=88的判断。
第二条SQL是8,说明用的是组合索引。

rows:
当只用索引void_id时,vod_id>0 时,索引可能扫描25w+,当用组合做引时,可能扫描51W+,这个数据有时会是过期的不正确(有时需要table analysis下),用1列索引,2列索引时,有自己的策略,并不是说有50w 索引扫描就是50w,有可能是25W。

时间:
第一条、根据索引扫描后,每条都需要再次判断是否=88。
第二条、根据索引可以直接定位到目标行。

这个把重点搞偏了,vod_id全部>0, 不应这样写where条件。account_id 为具体值,不应该在组合索引后。
目前这个索引基本也是费的。
大肠猴 2019-10-08
  • 打赏
  • 举报
回复
引用 1 楼 董旭阳TonyDong 的回复:
你用的是哪个版本 MySQL?
5.6版本
大肠猴 2019-10-08
  • 打赏
  • 举报
回复
引用 4 楼 蜕变之痛 的回复:
为什么 possible_key 是空,key是非空,没见过。extra内容不全,无法进一步判断。
都是 Using where; Using index
蜕变之痛 2019-10-04
  • 打赏
  • 举报
回复
为什么 possible_key 是空,key是非空,没见过。extra内容不全,无法进一步判断。
AHUA1001 2019-09-30
  • 打赏
  • 举报
回复
执行计划,只是参考,不一定准确。 好多时候,执行计划好的,效率未必好。
遇星 2019-09-30
  • 打赏
  • 举报
回复
注意key_len,第一条SQL是4,说明只用到了联合索引的第一个列vod_id,所以vod_id这个索引只用于vod_id>0的筛选,从索引读取数据之后,还要进行account_id=88的判断,慢就是慢在多出了另外判断account_id=88;
而第二条key_len是8,也就是说,where条件直接在索引上判断。
所以第二条会快一点。

  • 打赏
  • 举报
回复
你用的是哪个版本 MySQL?
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 【运算单元构造实验报告】运算单元是计算机硬件系统的关键构成部分,主要承担执行算术运算和逻辑运算的任务。在本次实验,我们着重探讨了带有累加器的运算单元的设计,涵盖了溢出识别、有符号数值与无符号数值运算的差异性,以及采用补码方式进行的加法与减法运算的实现机制。 一、实验目标 1. 掌握运算单元的基本构造,理解带有累加器的运算单元的具体实现途径。 2. 学习并领会溢出检测的机制,能够设计并构建溢出检测电路,用以判定运算结果是否超出了数据类型的表示范畴。 3. 明辨有符号数值和无符号数值运算的不同特性,把握它们在运算过程各自的处理方法。 4. 熟练掌握基于补码方式的加法与减法运算的执行,理解补码形式下的溢出判定准则。 5. 熟悉运算单元内部的数据传输路线,明晰数据在运算过程的流转路径。 6. 设计一个能够支持有符号数值与无符号数值运算、补码加法/减法运算以及有符号数值溢出检测的运算单元电路。 二、实验仪器 采用JZYL—Ⅱ型计算机组成原理实验装置,配备2片74181运算单元芯片作为算术逻辑单元(ALU),2片74LS373用作八位D型锁存器,并辅以一些基础门电路和多路选择器来完成电路设计。 三、实验内容 1. 运用片74181构建一个8位运算单元,负责处理数据的4位与低4位。 2. 设计并实现溢出检测电路,确保在有符号数值与无符号数值的加法运算均能准确识别溢出状况。 3. 通过74LS373增加累加器功能,使运算结果得以保存。 4. 将所有设计整合,利用多路选择器来支持有符号数值与无符号数值的加法/减法运算。 四、实验电路 1. 8位运算单元由2片74181构成,通过控制...

57,064

社区成员

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

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