时间统计

改进 SQL Server 中的查询性能

Dean Smith

Founder, Atamai Analytics

SQL Server Management Studio

 

SQL Server Management Studio 启动画面

改进 SQL Server 中的查询性能

SSMS 中的 STATISTICS TIME

SELECT UNStatisticalRegion, 
        CountryName,
        Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName 
        FROM Cities)
            AND Capital IN 
                (SELECT CityName 
                    FROM Cities 
                    WHERE Pop2017 > 1000000);

STATISTICS TIME - 命令报告解析、编译和执行查询所用的毫秒数。

SQL Server 解析和编译时间: 
   CPU 时间 = 16 ms,耗时 = 21 ms。

(影响了 88 行)

 SQL Server 执行时间:
   CPU 时间 = 390 ms,耗时 = 382 ms。
改进 SQL Server 中的查询性能

SQL Server 执行时间

 SQL Server 执行时间:
   CPU 时间 = 390 ms,耗时 = 382 ms。
  • CPU 时间:服务器处理器处理查询所用时间
  • 耗时:查询总时长
改进 SQL Server 中的查询性能

示例:查询 1

SELECT UNStatisticalRegion, 
       CountryName,
       Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName -- 第1个子查询
        FROM Cities) 
            AND Capital IN 
                (SELECT CityName -- 第2个子查询
                 FROM Cities 
                 WHERE Pop2017 > 1000000); 
改进 SQL Server 中的查询性能

示例:查询 1

SET STATISTICS TIME ON
SELECT UNStatisticalRegion, 
       CountryName,
       Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName -- 第1个子查询
        FROM Cities) 
            AND Capital IN 
                (SELECT CityName -- 第2个子查询
                 FROM Cities 
                 WHERE Pop2017 > 1000000); 
SQL Server 执行时间:
   CPU 时间 = 391 ms,耗时 = 381 ms。
改进 SQL Server 中的查询性能

示例:查询 2

SELECT UNStatisticalRegion, 
       CountryName,
       Capital 
FROM Nations n
WHERE EXISTS 
    (SELECT 1 
     FROM  Cities c 
     WHERE n.Capital = c.CityName
        AND Pop2017 > 1000000);


SQL Server 执行时间:
   CPU 时间 = 0 ms,耗时 = 2 ms。
改进 SQL Server 中的查询性能

示例:查询 2

SELECT UNStatisticalRegion, 
       CountryName,
       Capital 
FROM Nations n
WHERE EXISTS 
    (SELECT 1 
     FROM  Cities c 
     WHERE n.Capital = c.CityName
        AND Pop2017 > 1000000);
SET STATISTICS TIME OFF
SQL Server 执行时间:
   CPU 时间 = 0 ms,耗时 = 2 ms。
改进 SQL Server 中的查询性能

比较查询

  • 第一个查询包含两个子查询
SELECT UNStatisticalRegion, 
       CountryName,
       Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName 
        FROM Cities)
            AND Capital IN 
                (SELECT CityName 
                 FROM Cities 
                 WHERE Pop2017 > 1000000);
SQL Server 执行时间:
   CPU 时间 = 391 ms,耗时 = 381 ms。
  • 第二个查询使用 EXISTS
SELECT UNStatisticalRegion, 
       CountryName,
       Capital 
FROM Nations n
WHERE EXISTS 
    (SELECT 1 
     FROM  Cities c 
     WHERE n.Capital = c.CityName
        AND Pop2017 > 1000000);
SQL Server 执行时间:
   CPU 时间 = 0 ms,耗时 = 2 ms。
改进 SQL Server 中的查询性能

耗时 vs. CPU 时间

耗时(Elapsed time)

  • 分析查询时间统计时可能波动
  • 衡量最快查询的最佳指标

CPU 时间

  • 分析查询时间统计时应变化较小
  • 若服务器处理器并行运行,可能不具参考价值
改进 SQL Server 中的查询性能

取平均值

  • 不要只看一次测量,请取平均值。
elapsed time = 2032 ms.

elapsed time = 2060 ms.

elapsed time = 1915 ms.

elapsed time = 4009 ms.

elapsed time = 3511 ms.

Average elapsed time = 2705 ms.
改进 SQL Server 中的查询性能

Vamos praticar!

改进 SQL Server 中的查询性能

Preparing Video For Download...