首頁  >  文章  >  資料庫  >  如何有效地從一個表中選擇另一表中不存在的行?

如何有效地從一個表中選擇另一表中不存在的行?

DDD
DDD原創
2024-10-26 11:49:29686瀏覽

 How to Efficiently Select Rows from One Table that Are Not Present in Another Table?

MySQL 選擇另一個表中不存在的行

共享公共主表時取得表A 中存在但不存在於表B中的所有行鍵,有幾種方法可用,但效能影響各不相同。

使用具有NOT EXISTS 的子查詢:

使用NOT EXISTS 的子查詢的初始方法是可行的選項,但可能相對較慢,尤其是對於相對較慢,尤其是對於相對較慢較大的資料集。

使用左聯接:

如您所發現的,左聯可以執行得更快。在共用列上連接表 A 和表 B 時,表 A 中與表 B 中任何行都不匹配的行在連接列中將具有 NULL 值。過濾這些 NULL 值可以有效地隔離所需的行。

程式碼範例:

<code class="sql">SELECT *
FROM A
LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL;</code>

其他提示:

  • 確保兩個表格的連接欄位上有正確的索引。
  • 在表 B 上使用覆蓋索引來減少磁碟讀取次數。
  • 考慮使用負過濾器的 UNION 查詢明確排除表 B 中的行。

總體結論:

雖然左連接方法通常優於子查詢方法,但最佳解決方案可能會有所不同,具體取決於具體的數據集和模式。建議進行實驗和性能測試,以確定每種情況下最有效的方法。

以上是如何有效地從一個表中選擇另一表中不存在的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn