[英]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.