簡體   English   中英

INNER JOIN 能否提供比 EXISTS 更好的性能

[英]Can an INNER JOIN offer better performance than EXISTS

我一直在研究對一系列過程進行性能改進,最近一位同事提到他在使用 INNER JOIN 代替 EXISTS 時取得了顯着的性能改進。

作為調查為什么會這樣的一部分,我想我會在這里問這個問題。

所以:

  • INNER JOIN 能否提供比 EXISTS 更好的性能?
  • 什么情況下會出現這種情況?
  • 我如何設置測試用例作為證明?
  • 你有任何有用的鏈接到進一步的文檔嗎?

事實上,人們可以為這個問題帶來任何其他經驗。

如果有任何答案可以專門解決這個問題,而沒有任何其他可能的性能改進建議,我將不勝感激。 我們已經取得了相當程度的成功,我只是對這一項感興趣。

任何幫助將非常感激。

一般來說, INNER JOINEXISTS是不同的東西。

前者返回兩個表中的重復項和列,后者返回一個記錄,並且作為謂詞,僅從一個表返回記錄。

如果在UNIQUE列上執行內部UNIQUE ,則它們表現出相同的性能。

如果在應用了DISTINCT的記錄集上進行內連接(以去除重復項),則EXISTS通常更快。

INEXISTS子句(具有等值相關性)通常采用幾種SEMI JOIN算法中的一種,這些算​​法通常比其中一個表上的DISTINCT更有效。

在我的博客中看到這篇文章:

也許,也許不是。

  • 最有可能產生相同的計划
  • INNER JOIN可能需要DISTINCT才能獲得相同的輸出
  • EXISTS處理NULL

在帶有INEXISTJOIN語句的sql server 2019查詢中,有不同的計划(如果添加了正確的索引)。 所以性能也不同。 文章https://www.mssqltips.com/sqlservertip/6659/sql-exists-vs-in-vs-join-performance-comparison/ 中顯示JOIN更快一些。

PS 我知道這個問題是關於 sql server 2005(在標簽中),但人們大多通過文章標題尋找答案。

暫無
暫無

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

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