當(dāng)應(yīng)用能夠方便地緩存單個(gè)查詢的結(jié)果的時(shí)候
當(dāng)可以將數(shù)據(jù)分布到不同的 MySQL 服務(wù)器上的時(shí)候
當(dāng)能夠使用 IN()的方式代替關(guān)聯(lián)查詢的時(shí)候
并發(fā)場(chǎng)景多,DB 查詢頻繁,需要分庫分表
不推薦使用 join 的原因
1.DB 承擔(dān)的業(yè)務(wù)壓力大,能減少負(fù)擔(dān)就減少。當(dāng)表處于百萬級(jí)別后,join 導(dǎo)致性能下降;
2. 分布式的分庫分表。這種時(shí)候是不建議跨庫 join 的。目前 mysql 的分布式中間件,跨庫 join 表現(xiàn)不良。
3. 修改表的 schema,單表查詢的修改比較容易,join 寫的 sql 語句要修改,不容易發(fā)現(xiàn),成本比較大,當(dāng)系統(tǒng)比較大時(shí),不好維護(hù)。
不使用 join 的解決方案
在業(yè)務(wù)層,單表查詢出數(shù)據(jù)后,作為條件給下一個(gè)單表查詢。也就是子查詢。會(huì)擔(dān)心子查詢出來的結(jié)果集太多。mysql 對(duì) in 的數(shù)量沒有限制,但是 mysql 限制整條 sql 語句的大小。
通過調(diào)整參數(shù) max_allowed_packet ,可以修改一條 sql 的最大值。建議在業(yè)務(wù)上做好處理,限制一次查詢出來的結(jié)果集是能接受的。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.