Impossible WHERE noticed after reading const tables
Posted huahua035
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Impossible WHERE noticed after reading const tables相关的知识,希望对你有一定的参考价值。
阿里云反馈的慢SQL,执行计划返回如下:Impossible WHERE noticed after reading const tables
sql很简单:
SELECT * FROM deposit_transaction WHERE request_Id = ‘XXX‘
而且该表的request_id创建了唯一索引:很明显,这个字段是保持幂等操作的,通过数据库的唯一索引实现;
每次数据落地前,都要执行该SQL查询是否记录存在,而数据库做幂等兜底;
如果request_id不存在,竟然没有走request_id的唯一索引....
问题是:
基本99.99%的查询,肯定数据库不存在呀!
可是,mysql的innoDB引擎,主键查询或者唯一性索引查询,如果这条数据没有的话,它会全表扫描,然后得出一个结论,该数据不在表中。
对于高并发的库来说,这条数据,会让负载特别的高。
所以:
高并发系统,建议通过缓存做幂等校验,数据库唯一索引兜底!或者直接通过数据库的唯一索引兜底!
普通系统,并发小,数据量又不大,那就查询一把呗,IO高,可是不影响嘛!!!
以上是关于Impossible WHERE noticed after reading const tables的主要内容,如果未能解决你的问题,请参考以下文章
MySQL特异功能之:Impossible WHERE noticed after reading const tables
PHP mysqli 子查询返回 Impossible WHERE 在读取 const 表后注意到
在 Ruby on Rails 中使用 WHERE 搜索功能时出错