我遇到了这个问题:
我想问一下我是否使用了查询
SELECT * FROM table WHERE 0=1
Run Code Online (Sandbox Code Playgroud)
要么
SELECT TOP 0 * FROM table
Run Code Online (Sandbox Code Playgroud)
它会立即返回列名,还是继续解析整个表,最后返回零结果?
我有一个10,000行的生产表 - 它会检查WHERE
每一行的条件吗?
mar*_*c_s 31
SQL Server查询优化器足够聪明,可以发现这种WHERE
情况永远不会true
在任何行上产生结果,所以它实际上并不打算扫描表.
如果你查看这样一个查询的实际执行计划,很容易看到没有做任何事情并且查询立即返回:
小智 15
MySql非常智能,可以检测到它,并知道它无法做到.
desc SELECT * FROM table WHERE 0=1;
Run Code Online (Sandbox Code Playgroud)
在查询中
SELECT * FROM table WHERE 0=1
Run Code Online (Sandbox Code Playgroud)
该WHERE
子句永远不会成立,因此SQL Server不会扫描您的所有表.
并在查询中
SELECT TOP 0 * FROM table
Run Code Online (Sandbox Code Playgroud)
您正在指定,TOP 0
因此SQL Server非常智能,因此它永远不会扫描您的表以返回0行.
这两个查询都只返回列标题.
归档时间: |
|
查看次数: |
1923 次 |
最近记录: |