ifNULL()與nullif()嵌套導(dǎo)致的性能損耗
在 mysql 中使用 jpa 拼接動態(tài)條件 sql 時,使用 ifnull(nullif(?1,”),’xxx字段’) 這樣的嵌套函數(shù)可能存在性能損耗。
當(dāng) nullif(?1,”) 遇空值時,它會返回空字符串。然后,外層的 ifnull() 函數(shù)將此空字符串與 ‘xxx字段’ 進(jìn)行比較,結(jié)果始終為真。因此,實際執(zhí)行的 sql 語句相當(dāng)于 where xxx字段=xxx字段,這是一種冗余且不必要的檢查。
這種做法不僅對性能有害,還會增加代碼的可維護(hù)性。相反,應(yīng)使用代碼來控制此類需求,例如:
if (parameter != null) { query.where("xxx字段 = :xxx字段").setParameter("xxx字段", parameter); }
避免在數(shù)據(jù)庫表設(shè)計中使用 null 值也有助于提高性能。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END