- 有张表共一百多万数据,primary key (col1,col2,col3),执行计划显示条件 WHERE (col1,col2,col3) in ((v1,v2,v3),(v4,v5,v6,)……)走了索引,IN 的组合在 10 个以内,实际执行时花费 80 秒左右
- 发现后改为了 ( col1=v1 AND col2 = v2 AND col3 = v3 ) OR (col1=v4,col2=v5,col3=v6)……的形式,查询变快。
- 想知道两个方式的区别,以及执行计划有可能不准确吗?
1
lpts007 Jun 6, 2020
没法回答。按理说不应该这个表现。软硬件配置上一下,sql 、表结构、explain 结果上一下。
|
2
qumingkunnan OP @lpts007 MySQL 版本 5.6 http://sqlfiddle.com/#!9/a1a69f/5 给了脱敏后的结构和 SQL,执行计划二者基本没区别,但是真的执行时间还是和我题中描述的那样,硬件配置也给不了,没有这个服务器的权限,抱歉
|
3
qumingkunnan OP @lpts007 这个问题,第一种执行计划扫描了所有行,第二种只有 OR 关系个数的行被扫描,应该是这个问题了。但是不知道为什么第一种会扫描全表的行
|
4
lpts007 Jun 8, 2020 via Android
查询快的那种,到底多快? 70 多秒?
慢的那个 force index 试一下,我看着两个语句也确实一样。 |
5
lpts007 Jun 9, 2020
@qumingkunnan 另外感觉挺奇怪的 你这个语句。 col1,2,3 是主键,那还 group by col1,2,3 干啥 sum 也没什么用啊,根本不需要。是不是脱敏脱得过头了 跟原意不一致了?
|
6
qumingkunnan OP @lpts007 嗯,是有些不一致了,是我的问题,多谢了!我比较纠结的是两种写法的执行效率问题,确认了多列 in 确实会执行更慢
|