如果一切都正常工作,那么它就不應(yīng)該正常工作,但我們都知道,所有的事情都不能正常工作,特別是在查詢優(yōu)化器、查詢計(jì)劃緩存和統(tǒng)計(jì)數(shù)據(jù)方面。
首先,我建議重建索引和統(tǒng)計(jì)數(shù)據(jù),然后清除查詢計(jì)劃緩存,以確保這不會(huì)搞砸。然而,即使這樣做了,我也遇到了一些問(wèn)題。
我曾經(jīng)經(jīng)歷過(guò)一些情況,即左連接比內(nèi)部連接要快。
其根本原因是:如果您有兩個(gè)表,并且使用索引(在兩個(gè)表上)連接到一個(gè)列上。內(nèi)部聯(lián)接將產(chǎn)生相同的結(jié)果,不管您是在表1上的索引中循環(huán)條目,還是在表2上匹配索引,就好像您要在表2上對(duì)索引中的條目執(zhí)行反向循環(huán),并在表1中與索引匹配。問(wèn)題是,當(dāng)您有誤導(dǎo)性統(tǒng)計(jì)信息時(shí),查詢優(yōu)化器將使用索引的統(tǒng)計(jì)信息來(lái)查找匹配項(xiàng)最少的表(基于其他標(biāo)準(zhǔn))。如果有兩個(gè)表,每個(gè)表有100萬(wàn)行,表1中有10行匹配,在表2中有100000行匹配。最好的方法是對(duì)表1進(jìn)行索引掃描,并在表2中匹配10次。相反的是一個(gè)索引掃描,循環(huán)超過(guò)100000行,并試圖匹配100000次,只有10次成功。因此,如果統(tǒng)計(jì)數(shù)據(jù)不正確,優(yōu)化器可能會(huì)選擇錯(cuò)誤的表和索引來(lái)循環(huán)。
如果優(yōu)化器選擇按編寫(xiě)的順序優(yōu)化左聯(lián)接,那么它的性能將優(yōu)于內(nèi)部連接。
但是,優(yōu)化器也可以將左連接優(yōu)化為左半連接。要使它選擇您想要的,您可以使用強(qiáng)制命令提示。