時間統計

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 parse and compile time: 
   CPU time = 16 ms, elapsed time = 21 ms.

(88 rows affected)

 SQL Server Execution Times:
   CPU time = 390 ms,  elapsed time = 382 ms.
SQL Serverでクエリ性能を改善する

SQL Server 実行時間

 SQL Server Execution Times:
   CPU time = 390 ms,  elapsed time = 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でクエリ性能を改善する

クエリの比較

  • 2つのサブクエリを含む最初のクエリ
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 を使う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でクエリ性能を改善する

経過時間 vs. CPU 時間

【経過時間】

  • クエリ時間統計の分析では変動することがある
  • 最速のクエリを測るのに最適な指標

【CPU 時間】

  • クエリ時間統計の分析ではほとんど変動しないはず
  • サーバーが並列処理中は有効な指標にならない場合がある
SQL Serverでクエリ性能を改善する

平均を取る

  • 1回の測定に頼らず、平均を取りましょう。
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でクエリ性能を改善する

Passons à la pratique !

SQL Serverでクエリ性能を改善する

Preparing Video For Download...