mysql在索引上查询非索引类型的值导致的慢查询

来源:互联网 发布:经济学博士申请 知乎 编辑:程序博客网 时间:2024/05/21 06:26

发生问题的sql如下:

SELECT column_name,comment,type_name,integer_idx FROM tmp_alipay_columnsWHERE sd_id=(SELECT CAST(cd_id as SIGNED) FROM tmp_alipay_sds WHERE sd_id=333 AND cd_id IS NOT null AND cd_id<>'' LIMIT 1)

tmp_alipay_sds的sd_id列为varchar类型的索引

当传入参数333为int时,由于类型不同

mysql会隐式转换,将sd_id和传入的值转为浮点数(‘1a’,'1‘都会转为1,)

此时会发现无法使用索引,所以走了全表扫描

tmp_alipay_sds行数为600W

跑这个sql的任务是一个大任务

直接导致数据库服务器卡死 

问题还是被老板发现的 大哭

下次每有新的sql重构或者涉及大表查询,一定要先explain


0 0
原创粉丝点击