msyql 一个索引优化的问题

  1. 问题:执行一个左关联查询,速度非常慢,有四五分钟,起初以为没加索引,检查后发现索引都是加好的,于是查看sql执行计划,如下:
EXPLAIN SELECT * FROM p_t_nc_relation a LEFT JOIN ms_region b ON a.source_id  =  b.ID  WHERE b.ID IS NULL
  结果如图:
图片.png

通过sql执行计划可以看到扫描的是全表。
后来找到了问题,查询速度慢是因为关联查询的字段类型不一致导致的
p_t_nc_relation 中的source_id 是bigint型的,ms_region 中的id 是varchar型的,所以导致索引失效了。

2.解决方法:
查询的时候将bigint型的转为varchar型
sql如下:

EXPLAIN SELECT * FROM p_t_nc_relation a LEFT JOIN ms_region b ON CAST(a.source_id AS CHAR) =  b.ID  WHERE b.ID IS NULL 
    更改sql后的结果如图:

图片.png

现在能看到索引已经起到作用了,查询速度飞快
其实基于这种已经加上索引,但是查询速度还很慢的问题,也可以从数据库编码,表编码,字段编码方向去考虑解决,有时候编码不一致也会导致这种问题。
关于编码问题导致的索引失效,链接:https://blog.csdn.net/everda/article/details/77476716

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容