mysql的版本:8.0.11
表信息
大约600w的数据量的表:
表结构:
原始sql执行
经过执行n次,缓存之后还是需要4-5s:
执行计划如下:
下面是数据为390w的表查询时间和计划:
同等语义改造后的sql
改造后的语句执行计划如下:
执行时间如下:
总结
目前只能总结下这些现象,不能从更深层次的原理去解释这些现象。希望有更多的时间学习mysql相关理论知识再来补充。
1.不同数据量的执行计划也是不一样的
2.not exists可以适当的场景下替代掉not in 、or 以及!等,可能更容易用到索引。