sql 优化之多表联合查询干掉 “distinct” 去重关键字
在我提交了代码的时候,架构师给我指出我这个sql这样写会有问题。因为在分库分表的时候,是不支持子查询的。
所以需要把多表的子查询的 sql 结构进行优化。
是不是挺恐怖的;(此处为了脱敏,我把相关的 sql 关键词都给打码掉了)
这个 sql 的执行步骤如下: 1、查询出来 d 表中的某个 id 字段包含多个 id 值的所有的数据(因为此表是 1-n 的关系,所以需要去重,仅需要拿到不重复的 id 才可以继续下一个步骤);可以看到此步骤我把查询出来的多个值的结果给生成的了一个子表名为 sss;
2、下一个步骤就是需要进行排序(以时间进行倒序排序,因为要在前台进行按时间进行展示);
3、第 3 步就是把这些结果与 a 表进行合并,查询出来排序后的每个 id 的信息;然后进行分页处理;
其他的可以不必关心,最终要的是去重关键字(DISTINCT),拿小本本记号,一会要考哦。
实践是验证真理的唯一标准
例如有下表:
可以看到name和product_unit列的值都有可能是重复的。
mysql> SELECT t1.id,t1.name,t1.product_unit FROM dd_product_category t1;+| id | name | product_unit |+| 55 | 饮料 | 瓶 || 56 | 饮料 | 箱 || 57 | 零食 | 包 || 59 | 膨化食品 | 袋 || 60 | 方便食品 | 箱 || 61 | 自热火锅 | 碗 || 62 | 方便面 | 箱 || 63 | 矿泉水 | 箱