首頁 >資料庫 >mysql教程 >EXISTS 子查詢:SELECT 1 或 SELECT * – 這對效能重要嗎?

EXISTS 子查詢:SELECT 1 或 SELECT * – 這對效能重要嗎?

Barbara Streisand
Barbara Streisand原創
2025-01-15 20:38:13323瀏覽

EXISTS Subqueries: SELECT 1 or SELECT * – Does it Matter for Performance?

*EXISTS 子查詢:SELECT 1 與 SELECT 的比較**

在 SQL 中使用 EXISTS 子查詢時,一個常見的問題是:子查詢中應該使用 SELECT 1 還是 SELECT *?

*SELECT 與 SELECT 1**

過去,人們認為在 EXISTS 子查詢中,SELECT 1 比 SELECT * 更有效率。然而,事實並非如此。 SQL Server 會最佳化 EXISTS 檢查,無論子查詢的 SELECT 清單中指定了哪些欄位,它都會向系統傳回 NO DATA。

微軟的觀點

根據微軟的說法:「由EXISTS 引入的子查詢的SELECT 清單幾乎總是包含星號(*)。沒有理由列出列名,因為您只是在測試是否存在滿足子查詢中指定條件的行。

示範

為了驗證這一點,請考慮以下查詢:

<code class="language-sql">SELECT whatever
FROM yourtable
WHERE EXISTS( SELECT 1/0
FROM someothertable 
WHERE a_valid_clause )</code>
如果 SELECT * 實際上對選定的列執行任何操作,則查詢將導致除以零錯誤。但是,它不會,這表示子查詢的 SELECT 清單被忽略,僅用於確定行的存在。

SQL 標準

SQL 標準也支持這個觀點:「如果'

' 只包含在一個直接包含在 中的 中,那麼'' 等同於一個任意的。

結論

總之,在 EXISTS 子查詢中使用 SELECT 1 或 SELECT * 不會產生效能差異。因此,建議使用哪種選項更易讀或與您的程式設計風格一致。

以上是EXISTS 子查詢:SELECT 1 或 SELECT * – 這對效能重要嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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