首頁 > 資料庫 > mysql教程 > 為什麼 INNER JOIN 中的「OR」條件如此緩慢?

為什麼 INNER JOIN 中的「OR」條件如此緩慢?

Mary-Kate Olsen
發布: 2025-01-10 19:07:42
原創
606 人瀏覽過

Why Are

SQL Server 2008 中 INNER JOIN 條件下使用 "OR" 導致效能問題的解析

一個針對兩張大約 5 萬行的小型表的緩慢查詢,經過 SQL Server 2008 資料庫專家的仔細檢查,找到了罪魁禍首:INNER JOIN 條件中的 "OR" 運算子。

問題程式碼片段如下:

<code class="language-sql">SELECT mt.ID, mt.ParentID, ot.MasterID
FROM dbo.MainTable AS mt
INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID
                                  OR ot.ID = mt.ParentID</code>
登入後複製

將 "OR" 替換為一對 LEFT JOIN 後,查詢速度顯著提升,只需一秒鐘即可完成。

JOIN 條件中的 "OR" 是否是不良實務?

專家思考,在 JOIN 條件中使用 "OR" 是否總是不可取,或者他們的情況僅僅是由於特定的表結構導致的個例。

技術解釋

JOIN 條件中使用 "OR" 的問題在於,它無法被最佳化為 HASH JOIN 或 MERGE JOIN 操作。查詢最佳化器只能將其表示為不同結果集的合併:

<code class="language-sql">SELECT  *
FROM    maintable m
JOIN    othertable o
ON      o.parentId = m.id
UNION ALL
SELECT  *
FROM    maintable m
JOIN    othertable o
ON      o.id = m.parentId</code>
登入後複製

雖然每個單獨的結果集都是等值連接,但當存在 "OR" 時,優化器無法識別它們為等值連接。 這導致查詢效率低下。

以上是為什麼 INNER JOIN 中的「OR」條件如此緩慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板