首頁 >資料庫 >mysql教程 >EXISTS 子句最佳化:SELECT 1 與 SELECT * — 這很重要嗎?

EXISTS 子句最佳化:SELECT 1 與 SELECT * — 這很重要嗎?

Barbara Streisand
Barbara Streisand原創
2025-01-15 20:48:43639瀏覽

EXISTS Clause Optimization: SELECT 1 vs. SELECT * — Does it Matter?

*EXISTS 子句效能:SELECT 1 與 SELECT 的比較**

在 SQL 中,EXISTS 子句用於檢查子查詢中是否存在符合指定條件的行。長期以來,開發人員在 EXISTS 查詢中同時使用 SELECT 1 和 SELECT *,這引發了一個問題:哪種方法更有效率?

SQL Server 最佳化

根據微軟的說法,SQL Server 夠智能,能夠辨識 EXISTS 的使用,而不管子查詢的 SELECT 清單是什麼。它不會向系統傳回任何數據,因此 SELECT * 和 SELECT 1 子句在效能方面是等效的。

根據微軟的文件:

"由EXISTS 引入的子查詢的select 清單幾乎總是包含星號()。沒有理由列出列名,因為您只是在測試是否存在滿足子查詢中指定條件的行。

自我驗證

為了證實這種行為,您可以執行以下查詢:

<code class="language-sql">SELECT whatever
FROM yourtable
WHERE EXISTS(SELECT 1/0
                 FROM someothertable
                WHERE a_valid_clause)</code>
如果 SELECT 清單確實參與其中,則此查詢將觸發除零錯誤。但是,由於 SQL Server 理解 EXISTS 子句的上下文,因此它不會對 SELECT 清單執行任何計算。

SQL 標準

ANSI SQL 1992 標準進一步闡明了這種行為,指出在 EXISTS 謂詞的上下文中,select 列表 "*" 等效於任意字面值。

結論

在 SQL Server 中,在 EXISTS 子句中選擇 SELECT 1 和 SELECT * 不會影響效能。這兩種方法都會產生相同的結果,因為優化器會識別它們的用途並且不會向系統傳回任何資料。

以上是EXISTS 子句最佳化:SELECT 1 與 SELECT * — 這很重要嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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