需求:我需要通过codes查询出每个code对应的a记录
我的SQL是这样写的:
SELECT count(1) ,code
FROM t_a
WHERE `status` = 1
GROUP BY code
看上去好像没什么问题,能够满足需求,但是我请教师兄时,发现了如下问题:
1、t_a存在大量数据,而chainCodes可能有多个,查询结果巨大,导致慢SQL
2、当数据库里面存在脏数据时,导致我们查出我们不需要的数据,而这些数据是我们不可控的
所以,为了解决以上问题,提出两种方案:
1、我们可以在代码层面判断chianCodes个数,如果个数过大,我们可以分组查询
2、我们可以把codes加入SQL,这样我们就不会查出脏数据
下面是优化的代码:
SELECT count(1) ,code
FROM t_a
WHERE `status` = 1 and code IN ('a', 'b', 'c', 'd')
GROUP BY code