2021-05-13
MySQL 加上强制索引后查询反而更慢

环境: MySQL 5.6.16
【对表名和列名脱敏,SQL格式是完整的】
SELECT ID, 列2, 列3, 列4
FROM 表A
WHERE 时间列1 < ‘2020/5/13 16:00:20’
AND (时间列2 < ‘2020/5/13 16:00:20’ OR 时间列2 IS NULL)
AND 列4 IN (‘2’, ‘3’, ‘4’, ‘5’)
AND ID > XXXXX
ORDER BY ID
LIMIT 0, 200
这慢SQL在各库均要执行,时间条件是查询一年前 + 列4 条件不变 + id会变动。
列4 IN (‘2’, ‘3’, ‘4’, ‘5’) 的数据占总表3%~~~20%,再加上 AND ID > XXXXX 后数据量会更少。
MySQL自动执行计划是走主键,也就是ID列。 我强制走 force index (MemberGrade) 列索引,观察一个星期下来,在大部分库上的查询速度变快了,
但在小部分库查询速度反而下降几十倍【数据量变动很少】,这是什么原理?我强制走符合条件数据少的不是应该比走数据多的更快吗?
我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
回答交流
Markdown
请输入正文
提交
相关推荐
ERROR 1064: You have an error in your SQL syntax?我能看到具体哪行不?
回答 1
已采纳
在错误信息中,通常不会直接指示具体的行数或位置,而是提供一个大致的错误位置。错误代码"1064"表示SQL语法错误,但它不会提供具体的行数或位置。
MySQL ocp 最新题库可以从哪里获取?
回答 4
MySQL8.0OCP最新中文考试题库(如需完整版请联系作者)https://www.modb.pro/db/1703602138349916160
Windows下mysql版本升级报错
回答 4
已采纳
是老的mysql的环境变量没删除导致的,记录一下这个经验
MySQL的RPM包的用途说明
回答 1
已采纳
server所有服务器的二进制文件,配置和数据库common服务器端和客户端通用文件client连接到数据库库服务器的所有客户端组件devel编译mysql程序需要的库libs共享库libscompa
mysql数据库中一个账户可以多个主机同时登录吗?
回答 1
已采纳
当然是可以的
innodb cluster set可以只读吗?
回答 1
已采纳
可以,参考https://www.modb.pro/db/1696336849929326592
mysql如何实现oracle的instr功能,可以指定开始检索的位置?
回答 2
mysql支持instr函数,和oracle上的instr用法一样
有哪位可以帮我解答下udev规则?KERNEL=="dm-*",ENV{DM_UUID}=="mpath-222020001551e58d8",OWNER="grid",GROUP="asmadmin",MODE="0660"这个规则改不了权限
回答 3
multipath多路径可以参考这样的写法,要用12,用mapper出来的盘符名绑定即可cat/etc/udev/rules.d/12dmpermissions.rulesENV{DMNAME}“da
硬盘Random读写速度对MySQL数据库业务有影响吗?
回答 1
有影响https://blog.51cto.com/u508239/223542http://blog.itpub.net/30310891/viewspace2787997/
MySQL 触发器是第一时间执行的吗?
回答 1
MySQL触发器是在触发事件之后立即执行,但在触发器执行期间,其他会话可能能够读取数据,取决于事务隔离级别和锁策略例如,如果使用MySQL的默认隔离级别可重复读(REPEATABLEREAD)隔离级别
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~