簡體   English   中英

帶有OR條件的LEFT OUTER JOIN <-殺死數據庫服務器

[英]LEFT OUTER JOIN with an OR condition <- kills db server

簡而言之..

SELECT * 
FROM tbl1 
LEFT OUTER JOIN tbl2 ON tbl1.ID = tbl2.externalRefID 
WHERE tbl1.varref = '12345' OR tbl2.varref = '12345';

對於這些表中的任何數據量,此查詢將永遠花費。 但是我需要第二個表外部連接,因為它在externalRefID上通常不匹配。 為所引用的所有列創建的索引,但沒有區別,因為我需要跨多個表的索引(可以嗎?)

這一定很明顯,但是我看不到樹木的木頭...

您是否考慮過將查詢重構為UNION查詢?

SELECT *
  FROM tbl1 INNER JOIN tbl2 ON tbl1.id = tbl2.externalRefId
 WHERE tbl2.varref = '12345'
UNION
SELECT *
  FROM tbl1 OUTER JOIN tbl2 ON tbl1.id = tbl2.externalRefId
 WHERE tab.1.varref = '12345'

您也許也可以在此上使用UNION ALL。

暫無
暫無

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

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