SQL Server将读取子查询的所有记录?

SQL Server将读取子查询的所有记录?,sql,sql-server,Sql,Sql Server,SQL在检查条件时是否先读取所有记录?这里不需要进行子查询,这样会更昂贵。下面的查询将提供相同的结果。在上面的示例中,SQL引擎将首先构建子选择列表,然后执行外部查询,但您并没有完成任何需要子查询的唯一操作 SELECT * FROM (SELECT [coit_id] AS commodity ,[sist_id] ,[cost_modified_date] ,[cost_timestamp] FROM [Cargo_Ver

SQL在检查条件时是否先读取所有记录?

这里不需要进行子查询,这样会更昂贵。下面的查询将提供相同的结果。在上面的示例中,SQL引擎将首先构建子选择列表,然后执行外部查询,但您并没有完成任何需要子查询的唯一操作

SELECT * 
FROM (SELECT [coit_id] AS commodity
          ,[sist_id]
          ,[cost_modified_date]
          ,[cost_timestamp]
    FROM [Cargo_Ver_3_0_33].[dbo].[Commodity_State]) 
WHERE 
    commodity > 15 

有一篇关于“”的很好的文章


您可以阅读并看到,首先是
数据缓存
,然后是
查询执行
执行一些查找和其他操作的调用。

对不起,查询已粘贴,请阅读下面的行。您为什么使用子查询?不一定是不确定的,因为sql引擎是基于统计信息工作的,它会开发一个查询计划,并根据该查询计划执行查询。如果这是sql Server,并且您想查找,请按CTRL-L查看查询计划。您将看到商品过滤器确实直接应用于表,而不是在运行子查询之后。在SQL中,您描述了您想要什么,而不是如何做,然后(希望)优化器将找到生成该结果的最佳方法。您忘记了“[coit_id]AS commodity”字段。
    SELECT 
    [coit_id] AS commodity,
    [sist_id],
    [cost_modified_date],
    [cost_timestamp],
    FROM [Cargo_Ver_3_0_33].[dbo].[Commodity_State]  WHERE commodity > 15;