mysql两表关联查询时,如果关联字段类型不一致,此时查询出的结果会出现很多异常的情况,如:查询很慢、数据重复、数据不准。
先展示错误的示例:
可以看到上面的查询很久高达1秒钟,显然是很有问题的。
原因分析
注意看,cdn_relationship_child.department_id和department.id 这俩字段的数据类型是不一致的,但是他们代表的意思是一样的是部门id,这个是历史遗留的坑了。
分析过程
在解决问题前,先在单个表上面查询看看,是否有问题,
department表的id字段类型是 varchar(255),如果查询时带了引号,表示字符串,查询结果准确,如果查询时没带引号,不准确,如下图:
单表查询都有问题,那么多表关联查询,肯定也避免不了问题出现。单表查询时,查询结果莫名其妙的多了很多条,所以在连表查询时就出现了查询很慢的问题。
解决方案
回到连表查询慢的问题:因为 cdn_relationship_child.department_id字段是数字类型,如果直接去与department.id字段判断,就出现上面演示那里的错误情况,所以在group by前会查询出很多不准的额结果,数量变多了,所以group by查询时间很久。
修改关键:
concat(cdn_relationship_child.department_id,'') = department.id
可以看到查询准确,且耗时很短