SQL Server數據庫沒有JOIN條件導致笛卡爾乘積
在SQL Server數據庫中,我們常常用到JOIN條件來對數據庫進行連接查詢,需要注意的一個問題就是沒有JOIN條件會導致的笛卡爾乘積的問題。學過線性代數的人都知道,笛卡爾乘積通俗的說,就是兩個集合中的每一個成員,都與對方集合中的任意一個成員有關聯??梢韵胂?,在SQL查詢中,如果對兩張表JOIN查詢而沒有JOIN條件時,就會產生笛卡爾乘積。這就是我們的笛卡爾乘積導致的性能問題中最常見的案例:開發人員在寫代碼時遺漏了JOIN條件。
發生笛卡爾乘積的sql:
- select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform
- where project_fj.zhuangtai='未售' and project_fj.project_id=30
這個語句其實只是sql語句的一部分,問題是另一部分用到了表orderform,所以from中有orderform,但是上面的這部分語句完全沒有用到orderform,但是不設置條件就導致了笛卡爾乘積。
解決方法:
使用LEFT JOIN
- select sum(project_fj.danjia*project_fj.mianji) from project_fj LEFT JOIN orderform ON project_fj.id=orderform.project_id
- where project_fj.zhuangtai='未售' and project_fj.project_id=30
以上就是SQL查詢中沒有JOIN條件導致的笛卡爾乘積從而影響性能的一個案例,本文我們就介紹到這里了,希望本次的介紹能夠給對您有所收獲!
【編輯推薦】



















