前幾天幫同事優化了個SQL,原寫法使用多個子查詢這里不再重現了,大家都遇到過這樣一種情況,在項目后期的維護中,
修改別人的SQL代碼,超過30行的語句,多層子查詢,讀起來很坑,時間久的項目伴隨着人員的流通,你可能就不知道原作者寫這一堆的SQL是干什么用的,
當然碰到部分有注釋習慣的朋友還是好點的,過長的SQL后期維護性與可讀性很差,並且一般情況下性能也經不起推敲。
對於長的,復雜的SQL可以有很多種處理方式
1、沉到業務中取處理,拆分SQL
2、抽取公用統計屬性,建立冗余表
上邊簡單列舉這兩種,不再展開,這里關注上邊的問題處理
方案一
select id,
count(case when 屬性 in (1,2) then 1 else 0 end) as sum1,
count(case when 屬性 in (3) then 1 else 0 end) as sum2,
sum(case when 屬性 in (4,5) then 1 else 0 end) as sum3
from 表名
group by id
方案二
SELECT
count( * ) AS num,
count(if(字段=1,true,null)) AS sum1,
count(if字段=2,true,null)) AS sum2
FROM 表名
WHERE 其他條件
還有其他實現方式,這里不再展開,有興趣的朋友一起討論呀( ⊙ o ⊙ )!