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 表后注意到

mybatis 全查 分页 模糊查询一体

在 Ruby on Rails 中使用 WHERE 搜索功能时出错

DVWA之SQL Injection--测试分析(Impossible)

Brute Force_impossible