sql - "Where 0=1"会解析整个表还是只返回列名

标签 sql sql-server

我遇到了这个问题:

SQL Server: Select Top 0?

我想询问是否使用查询

SELECT * FROM table WHERE 0=1

SELECT TOP 0 * FROM table

它会立即返回列名,还是会继续解析整个表并最终返回零结果?

我有一个包含 10,000 行的生产表 - 它会检查每行的 WHERE 条件吗?

最佳答案

SQL Server 查询优化器足够聪明,可以发现此 WHERE 条件永远不会产生true 结果出现在任何行上,因此实际上不需要扫描表。

如果您查看此类查询的实际执行计划,很容易发现什么都没有执行,并且查询立即返回:

enter image description here

关于sql - "Where 0=1"会解析整个表还是只返回列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37405527/

相关文章:

sql - 从 SQL Server 中的 VARCHAR 中删除非数字字符的最快方法

mysql - 商品属性表交集查询

sql - 重命名 PostgreSQL 中的多个列

sql - 如何在 SQL 查询中查找时隙冲突

sql - 在 WHERE 子句中使用 NULL

sql-server - SQL 数据库的 Azure 用户 GRANT

c# - 如何将从数据库检索的 smalldatetime 转换回 smalldatetime 以重新发布到数据库

sql-server - SQL Server : Msg 102, 级别 15,状态 1,第 2 行 '=' 附近语法不正确

sql - 如何仅根据 A COLUMN 的不同值选择行

java - 无法通过 Android 测试连接到 Sql Server