亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

內部連接與交叉連接相比的性能

內部連接與交叉連接相比的性能

慕標琳琳 2019-11-13 14:09:56
發出內部聯接的效果與在WHERE子句中說明具有聯接條件的交叉聯接相同。我注意到公司中許多人使用交叉聯接,而在內部交叉聯接中使用內部聯接。更改其中一些查詢后,我沒有發現任何顯著的性能提升,并且想知道這是否只是巧合,還是DBMS是否透明地優化了此類問題(在我們的案例中為MySql)。這里是一個具體的討論示例:SELECT User.*FROM User, AddressWHERE User.addressId = Address.id;SELECT User.*FROM UserINNER JOIN Address ON (User.addressId = Address.id);
查看完整描述

3 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

交叉聯接產生的結果由兩個或多個表中的行的每種組合組成。這意味著如果表A有6行,表B有3行,則交叉連接將導致18行。在兩個表之間沒有建立關系-實際上,您只是產生每種可能的組合。


通過內部聯接,將表的一行的列值與另一(或同一)表的另一行的列值組合在一起,以形成單行數據。


如果將WHERE子句添加到交叉聯接中,則由于WHERE施加了限制因素,因此它充當內部聯接。


只要您的查詢遵守常識和特定于供應商的性能準則,我就認為將使用哪種類型的連接的決定簡單地考慮進去。


查看完整回答
反對 回復 2019-11-13
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我發現,允許第一種語法(用逗號分隔的表)的工作場所往往會花費大量時間來調試情況,這些情況下返回的行比預期的多。意外的交叉聯接是系統的禍根,甚至可以使最優化的數據庫癱瘓。去年,它至少使我們的pre-prod系統停止了兩次。

第二種語法(聯接語法)迫使編寫者首先考慮如何將表聯接在一起,然后僅返回感興趣的行。使用該語法意外地進行交叉聯接是不可能的,因此減少了意外地執行不良查詢的危險。

但是,除了這個問題之外,我從來沒有注意到我所擁有的任何系統中兩種語法之間的速度差異。


查看完整回答
反對 回復 2019-11-13
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

第一個示例在功能上與第二個示例相同。但是,出于多種原因,應避免使用此語法。首先,使用這種語法時,意外地獲得交叉聯接要容易得多,尤其是當表中存在多個聯接時。如果您看到很多這種類型的查詢都帶有關鍵字“ distinct”,則可能有人試圖修復交叉連接。

接下來,不贊成使用較舊樣式的左右聯接語法,并且將不再支持該語法。此外,它現在仍然無法正常工作。有時,它會誤解外部聯接并發回錯誤的結果集。因此,您在where子句中使用=或=的所有查詢都應立即替換。

第三,ANSI標準聯接更易于理解和維護。對聯接的理解是任何查詢任何關系數據庫所需的最關鍵的基本技能之一。我的經驗是,一些使用較舊樣式的人并不真正理解聯接及其工作方式,因此編寫的查詢實際上并沒有達到他們的預期目的。


查看完整回答
反對 回復 2019-11-13
  • 3 回答
  • 0 關注
  • 1006 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號