簡體   English   中英

由於性能不佳,左外聯接需要改進

[英]LEFT OUTER JOIN needs improving due to poor performance

我有一個表,該表具有“名稱”列以及引用同一表中其他條目的3個標識符。 我是一個查詢,它將這3個標識符解析為它們所引用的記錄的實際名稱。 到目前為止,我只管理了以下內容...

SELECT mt.Name, mt2.Name, mt3.Name, mt4.Name 
FROM MyTable AS mt1
LEFT OUTER JOIN MyTable AS mt2 ON mt2.Id = mt1.RefId1
LEFT OUTER JOIN MyTable AS mt3 ON mt3.Id = mt1.RefId2
LEFT OUTER JOIN MyTable AS mt4 ON mt4.Id = mt1.RefId3

...可以正常工作並返回三個引用記錄的名稱。 請注意,在某些情況下,RefId1 / 2/3值可能為空,因此並非始終使用所有RefId字段。 它可以工作,但速度不是很快,我相信實際上了解SQL的人可以大大改善這一點。 有任何想法嗎?

為了改善查詢,您可以使用INNER JOIN代替LEFT OUTER JOIN。 如果我正確理解您的評論,則mt2或mt3或mt4都會返回一個值。

因此,可以這樣編寫一個有效的查詢。 這樣可以確保一旦找到匹配項,就不再向前看。

SELECT mt.Name, mt2.Name
FROM MyTable mt, MyTable mt2
WHERE mt2.id = mt.RefId1
OR mt2.id = mt.RefId2
OR mt2.id = mt.RefId3

讓我知道這個是否奏效。

您是否嘗試過索引表?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM