Mysql 建立索引之后反而变慢(已解决)
记录一个神奇的问题,解决方法分享给大家,碰到类似问题,可以试试这种方法。
SQL查询背景
- 需要优化建索引的表为
FEDERATED
引擎(远程表) - 数据库1(服务器1)关联 数据库2(服务器2) 的表进行查询,故使用远程表
PS:索引失效请注意关联字段字符集是否相同
问题描述
未修改前,Sql查询速度稳定 4 s 左右
执行计划如下:
可以看到三个表(t2,t3,remote_xxx)未走索引,这三个表中的数据量也不多1000 – 3W 左右。
优化之后执行计划如下:
可以看到所有的查询都已经走了索引,但是查询速度 14.323 s,而且优化这三个表,每增加一个索引,整体查询速度就会慢几秒
解决方法
原 SQL 语句 t2,t3 相关的语句如下
LEFT JOIN remote_xxx1 t2
ON t2.fd_id = obj.fd_id and t2.qrcode_uuid = obj.fd_code_uuid
LEFT JOIN remote_xxx2 t3
ON t3.fd_id = obj.fd_id and t3.qrcode_uuid = obj.fd_code_uuid
修改之后
LEFT JOIN (select * from remote_xxx1 ) as t2
ON t2.fd_id = obj.fd_id and t2.qrcode_uuid = obj.fd_code_uuid
LEFT JOIN (select * from remote_xxx2 ) as t3
ON t3.fd_id = obj.fd_id and t3.qrcode_uuid = obj.fd_code_uuid
FEDERATED 远程表在连接查询时,如果发现出现类似情况,可以用
(select * from remote_xxx )
将 远程表 remote_xxx
包一层,再将索引相关的条件也移动到里面。
以本问题为例,将 fd_id 字段查询条件也放在里面
(select * from remote_xxx1 where fd_id = '2c90e41872dff0860172dff0868c0000')
修改完成之后,查询0.575 s
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/10934.html