首页 >数据库 >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