SQL Server 2012の8 GB RAMハイパーvボックスでクイックテストを実行しました。自分で結果を確認できます。これらのテストを実行している間、SQL Server Management Studio以外のウィンドウアプリケーションを実行していませんでした。
私のテーブルスキーマ:
CREATE TABLE [dbo].[employee](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_employee] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Employee
テーブル内のレコードの総数:178090131(約1億7,800万行)
最初のクエリ:
Set Statistics Time On
Go
Select Count(*) From Employee
Go
Set Statistics Time Off
Go
最初のクエリの結果:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 35 ms.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 10766 ms, elapsed time = 70265 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
2番目のクエリ:
Set Statistics Time On
Go
Select Count(1) From Employee
Go
Set Statistics Time Off
Go
2番目のクエリの結果:
SQL Server parse and compile time:
CPU time = 14 ms, elapsed time = 14 ms.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 11031 ms, elapsed time = 70182 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
83(= 70265-70182)ミリ秒の差があることに気づくでしょう。これは、クエリが実行されたときの正確なシステム状態に簡単に起因する可能性があります。また、1回の実行を行ったため、複数回実行して平均化を行うと、この差はより正確になります。このような巨大なデータセットの場合、差が100ミリ秒未満になると、2つのクエリにSQL Serverエンジンによるパフォーマンスの差がないと簡単に結論付けることができます。
注:両方の実行で、RAMヒットは100%に近い使用率です。両方の実行を開始する前に、SQL Serverサービスを再起動しました。