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

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

SQL Server中的內連接與左連接性能

SQL Server中的內連接與左連接性能

HUX布斯 2019-07-06 13:34:22
SQL Server中的內連接與左連接性能我已經為9個表創建了使用內部聯接的SQL命令,無論如何,這個命令需要很長時間(超過5分鐘)。所以我的民間建議我把內部加入改為左加入,因為左聯的表現更好,雖然我知道的是第一次。修改后,查詢速度明顯提高。我想知道為什么左連接比內部連接快?我的SQL命令如下所示:SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D諸若此類最新情況:這是我的模式簡介。FROM sidisaleshdrmly a -- NOT HAVE PK AND FK     INNER JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK         ON a.CompanyCd = b.CompanyCd             AND a.SPRNo = b.SPRNo             AND a.SuffixNo = b.SuffixNo             AND a.dnno = b.dnno    INNER JOIN exFSlipDet h -- PK = CompanyCd, FSlipNo, FSlipSuffix, FSlipLine         ON a.CompanyCd = h.CompanyCd           AND a.sprno = h.AcctSPRNo             INNER JOIN exFSlipHdr c -- PK = CompanyCd, FSlipNo, FSlipSuffix         ON c.CompanyCd = h.CompanyCd           AND c.FSlipNo = h.FSlipNo             AND c.FSlipSuffix = h.FSlipSuffix      INNER JOIN coMappingExpParty d -- NO PK AND FK         ON c.CompanyCd = d.CompanyCd           AND c.CountryCd = d.CountryCd      INNER JOIN coProduct e -- PK = CompanyCd, ProductSalesCd         ON b.CompanyCd = e.CompanyCd           AND b.ProductSalesCd = e.ProductSalesCd      LEFT JOIN coUOM i -- PK = UOMId         ON h.UOMId = i.UOMId      INNER JOIN coProductOldInformation j -- PK = CompanyCd, BFStatus, SpecCd         ON a.CompanyCd = j.CompanyCd            AND b.BFStatus = j.BFStatus                     AND b.ProductSalesCd = j.ProductSalesCd             INNER JOIN coProductGroup1 g1 -- PK = CompanyCd, ProductCategoryCd, UsedDepartment, ProductGroup1Cd         ON e.ProductGroup1Cd  = g1.ProductGroup1Cd             INNER JOIN coProductGroup2 g2 -- PK = CompanyCd, ProductCategoryCd, UsedDepartment, ProductGroup2Cd         ON e.ProductGroup1Cd  = g2.ProductGroup1Cd
查看完整描述

3 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

如果一切都正常工作,那么它就不應該正常工作,但我們都知道,所有的事情都不能正常工作,特別是在查詢優化器、查詢計劃緩存和統計數據方面。

首先,我建議重建索引和統計數據,然后清除查詢計劃緩存,以確保這不會搞砸。然而,即使這樣做了,我也遇到了一些問題。

我曾經經歷過一些情況,即左連接比內部連接要快。

其根本原因是:如果您有兩個表,并且使用索引(在兩個表上)連接到一個列上。內部聯接將產生相同的結果,不管您是在表1上的索引中循環條目,還是在表2上匹配索引,就好像您要在表2上對索引中的條目執行反向循環,并在表1中與索引匹配。問題是,當您有誤導性統計信息時,查詢優化器將使用索引的統計信息來查找匹配項最少的表(基于其他標準)。如果有兩個表,每個表有100萬行,表1中有10行匹配,在表2中有100000行匹配。最好的方法是對表1進行索引掃描,并在表2中匹配10次。相反的是一個索引掃描,循環超過100000行,并試圖匹配100000次,只有10次成功。因此,如果統計數據不正確,優化器可能會選擇錯誤的表和索引來循環。

如果優化器選擇按編寫的順序優化左聯接,那么它的性能將優于內部連接。

但是,優化器也可以將左連接優化為左半連接。要使它選擇您想要的,您可以使用強制命令提示。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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