SQL 查询执行时间、SQL Server、嵌套查询

Posted

技术标签:

【中文标题】SQL 查询执行时间、SQL Server、嵌套查询【英文标题】:SQL Query Execution time , SQL Server, Nested Query 【发布时间】:2017-12-28 10:20:33 【问题描述】:

我有一个查询如下:

SELECT Brand,Id,Model FROM product

由于 Product 表有超过 100 万条记录,这需要以秒为单位的时间。

但是查询很快就会执行。 (甚至不到一秒))

select count(*) as numberOfRows from (SELECT Brand,Id,Model FROM product) result

这是为什么呢?

【问题讨论】:

可能是因为查询优化器看到您的查询可以优化为仅获取记录数而不是所有记录本身。顺便说一句,您通常会这样做:SELECT count(*) FROM product 因为 sql server 足够智能,可以注意到您实际上并没有对选定的列做任何事情,所以它只是执行count(*)。检查执行计划。 【参考方案1】:

当您执行查询时,所用时间将根据列数和行数及其数据类型而有所不同。

在您有 10 列的表中,如果您为所有记录选择所有列 (*) 并为所有记录选择 1 或 2 列,则性能将有所不同。 因为第二种情况加载的数据量比较少,所以执行起来会比较快。

就像那样,当您说 Count(*) 时,结果只是一个单元格,而在您的第一个选择中,您为这 3 列选择了数百万行,因此数据量很高。

这就是为什么您可以更快地获得 Count(*) 结果。您无需在计数中提供 *,只需使用 Count(1) 即可获得更好的性能。

【讨论】:

虽然您所说的可能适用于边际性能问题,但实际上与问题无关。并且count(*)count(1) 具有相同的性能。

以上是关于SQL 查询执行时间、SQL Server、嵌套查询的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中执行嵌套 case 语句逻辑的最佳方法

在MS SQL Server中怎么查看正在执行的SQL?

sql语句中嵌套时候用in 和=有啥区别

C#写一套最全的SQL server帮助类(包括增删改查)

SQL Server IIF 与 CASE

sql语句中where条件的嵌套子查询性能