加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – CPU时间或经过的时间 – 这实际上意味着SQL Query

发布时间:2020-12-12 06:41:31 所属栏目:MsSql教程 来源:网络整理
导读:我有一个SQL Server 2012表与2697记录,该表未编入索引.未来高达10万条记录的数据将会增加.我没有加入任何其他表来检索记录.最初我创建了一个用户定义的函数来从表中检索记录. 后来我才知道视图会比用户定义的函数更快,因此我为该表创建了一个View. 要了解Quer
我有一个SQL Server 2012表与2697记录,该表未编入索引.未来高达10万条记录的数据将会增加.我没有加入任何其他表来检索记录.最初我创建了一个用户定义的函数来从表中检索记录.

后来我才知道视图会比用户定义的函数更快,因此我为该表创建了一个View.

要了解Query的性能,我包括以下代码以获取我的UDF,VIEW和直接SQL语句的CPU时间和已用时间.

SET STATISTICS IO ON;
SET STATISTICS TIME ON;

当我使用select查询直接从我的表中提取数据时,我得到了下面的CPU时间和经过的时间

SELECT [CollegeName],[CandidateID],[age],[race],[sex],[ethnic],[arm],[Weeknum],[siteid],[country],[Region],[SubRegion],[SNAME],[UID]
  FROM [testdata]

—-结果

Scan count 1,logical reads 1338,physical reads 0,read-ahead reads 0,lob logical reads 0,lob physical reads 0,lob read-ahead reads 0.
 SQL Server Execution Times:
   CPU time = 31 ms,elapsed time = 4381 ms.

当我使用VIEW时,我得到了CPU时间和经过时间

CREATE VIEW vw_testdata
AS
SELECT [CollegeName],[UID]
  FROM [testdata]

– 结果

Scan count 1,logical reads 1324,lob read-ahead reads 0.
SQL Server Execution Times:
       CPU time = 15 ms,elapsed time = 5853 ms.

而我的UDF又回来了

CREATE FUNCTION [dbo].[fn_DocApproval] (@collegename nvarchar(30) = NULL)
RETURNS TABLE 
AS
RETURN  
(
SELECT [CollegeName],[UID]
  FROM [testdata] WHERE CollegeName = ISNULL(@collegename,collagename)
)

– 结果

Scan count 1,lob read-ahead reads 0.
 SQL Server Execution Times:
   CPU time = 203 ms,elapsed time = 785 ms.

与直接sql和视图相比,UDF的运行时间非常短,但CPU时间更长.

但是,与直接SQL和UDF相比,视图中的CPU时间较少.

我想知道我们需要了解哪一个来确定查询的性能.

另外,为什么每次运行相同的查询时,CPU时间和经过的时间都会发生变化?

我的架构和示例dataFiddle

我目前有2697行,我无法将它们全部加载到小提琴中.

解决方法

根据文章 SQL Query performance Tuning

SQL Server解析和编译时间:当我们向SQL服务器提交要执行的查询时,它必须解析并编译任何语法错误,并且优化器必须为执行生成最佳计划. SQL Server解析和编译时间是指完成此预执行步骤所需的时间.如果查看第二次执行的输出,则SQL Server解析和编译时间部分中的CPU时间和已用时间均为0.这表明SQL服务器没有花费任何时间来解析和编译查询,因为执行计划在缓存中很容易获得. CPU时间是指CPU上的实际花费时间,经过时间是指完成解析和编译所花费的总时间. CPU时间和已用时间之间的差异可能在队列中等待时间以获得CPU周期或等待IO完成.这在性能调优中没有太大意义,因为值会因执行而异.如果您在本节中获得一致的值,可能您将使用重新编译选项运行该过程.

SQL Server执行时间:这是指SQL Server完成已编译计划执行所用的时间. CPU时间是指在CPU上花费的实际时间,其中经过的时间是完成执行的总时间,包括信号等待时间,完成IO操作的等待时间以及将输出传输到客户端所花费的时间.CPU时间可用于基线性能调整.除非您修改查询或数据,否则从执行到执行的此值不会有太大变化.服务器上的负载不会对此值产生太大影响.请注意,显示的时间以毫秒为单位.对于具有相同数据的相同查询,CPU时间的值可能因执行而异,但只有100秒,这只是一秒的一部分.经过的时间取决于许多因素,例如服务器上的负载,IO负载,服务器和客户端之间的网络带宽.因此,在进行性能调整时,始终将CPU时间用作基线.

您在计划中使用的逻辑读取次数越少,查询的效率就越高.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读