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高,可是不影响嘛!!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM