新聞中心
在SQL Server數(shù)據(jù)庫中,我們常常用到JOIN條件來對數(shù)據(jù)庫進(jìn)行連接查詢,需要注意的一個(gè)問題就是沒有JOIN條件會導(dǎo)致的笛卡爾乘積的問題。學(xué)過線性代數(shù)的人都知道,笛卡爾乘積通俗的說,就是兩個(gè)集合中的每一個(gè)成員,都與對方集合中的任意一個(gè)成員有關(guān)聯(lián)。可以想象,在SQL查詢中,如果對兩張表JOIN查詢而沒有JOIN條件時(shí),就會產(chǎn)生笛卡爾乘積。這就是我們的笛卡爾乘積導(dǎo)致的性能問題中最常見的案例:開發(fā)人員在寫代碼時(shí)遺漏了JOIN條件。

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的阿魯科爾沁網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
發(fā)生笛卡爾乘積的sql:
- select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform
- where project_fj.zhuangtai='未售' and project_fj.project_id=30
這個(gè)語句其實(shí)只是sql語句的一部分,問題是另一部分用到了表orderform,所以from中有orderform,但是上面的這部分語句完全沒有用到orderform,但是不設(shè)置條件就導(dǎo)致了笛卡爾乘積。
解決方法:
使用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條件導(dǎo)致的笛卡爾乘積從而影響性能的一個(gè)案例,本文我們就介紹到這里了,希望本次的介紹能夠給對您有所收獲!
【編輯推薦】
- SQL Server數(shù)據(jù)庫default value的使用總結(jié)
- SQL Server結(jié)合Mybatis調(diào)用存儲過程返回結(jié)果集
- SQL Server數(shù)據(jù)庫獲取TEXT字段的內(nèi)容長度的方法
- SQL Server 2008學(xué)習(xí)筆記之去重和給新加字段賦值
- SQL Server 2008中使用FileStream存取大文件實(shí)例介紹
本文標(biāo)題:SQLServer數(shù)據(jù)庫沒有JOIN條件導(dǎo)致笛卡爾乘積
文章URL:http://m.fisionsoft.com.cn/article/cojioeh.html


咨詢
建站咨詢
