mySql优化-timestamp不走索引及or不走索引优化

swx_order表和swx_order_provider表和swx_order_servicer表联查,where条件是last_modify_time,三张表的数据量都在40万以上,如下sql查询时间非常慢,而且主表(swx_order)时而走索引,时而不走索引,当last_modify_time时间区间很小时走索引,时间区间大之后就不走索引了,原因是如果加了索引的行数比较多,mysql的优化器会自动放弃索引而选择全表扫描

详细解释参考:MySQL :: MySQL 8.0 Reference Manual :: 8.9.4 Index Hints

优化思路:强制sql执行时使用索引,也就是不需要mysql的优化器去选择,通过use index和force index可以强制sql任何时间都走索引,优化后如图所示:

添加force index之后发现都不走索引了,继续查找原因,发现只有单表的时候force index是有效的,继续测试发现是where条件后的or条件导致索引失效,因此采用union替换or的方式优化sql,结果如图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值