理論的には、それらは同じ計画を使用し、ほぼ同時に実行されます。
実際には、
SELECT TOP 1 Id FROM Table1 ORDER BY Id DESC
おそらく a を使用しPRIMARY KEY INDEX
ます。
また、これは、他の列と一緒に選択することにした場合、より拡張可能ですid
。
実際の計画は次のようにMAX()
述べています。
SELECT <- AGGREGATE <- TOP <- CLUSTERED INDEX SCAN
、一方で計画は次のようにTOP 1
述べています。
SELECT <- TOP <- CLUSTERED INDEX SCAN
、すなわちaggregate
省略されます。
ここでは行が 1 つしかないため、集計は実際には何もしません。
PS@Mehrdad Afshari
および指摘したよう@John Sansom
に、インデックス化されていないフィールドMAX
ではわずかに高速です(もちろん20
、オプティマイザーが言うほどではありません):
-- 18,874,368 行
言語設定 英語
統計時間をオンに設定
統計IOをオンに設定
印刷「MAX」
SELECT MAX(id) FROM マスター
「TOP 1」を印刷
SELECT TOP 1 id FROM master ORDER BY id DESC
印刷「MAX」
SELECT MAX(id) FROM マスター
「TOP 1」を印刷
SELECT TOP 1 id FROM master ORDER BY id DESC
印刷「MAX」
SELECT MAX(id) FROM マスター
「TOP 1」を印刷
SELECT TOP 1 id FROM master ORDER BY id DESC
印刷「MAX」
SELECT MAX(id) FROM マスター
「TOP 1」を印刷
SELECT TOP 1 id FROM master ORDER BY id DESC
印刷「MAX」
SELECT MAX(id) FROM マスター
「TOP 1」を印刷
SELECT TOP 1 id FROM master ORDER BY id DESC
言語設定を us_english に変更しました。
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
最大
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 20 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 447、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 5452 ミリ秒、経過時間 = 2766 ミリ秒。
トップ1
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 2、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 6813 ミリ秒、経過時間 = 3449 ミリ秒。
最大
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 44、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 5359 ミリ秒、経過時間 = 2714 ミリ秒。
トップ1
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 0、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 6766 ミリ秒、経過時間 = 3379 ミリ秒。
最大
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 0、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 5406 ミリ秒、経過時間 = 2726 ミリ秒。
トップ1
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 0、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 6780 ミリ秒、経過時間 = 3415 ミリ秒。
最大
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 85、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 5392 ミリ秒、経過時間 = 2709 ミリ秒。
トップ1
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 10、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 6766 ミリ秒、経過時間 = 3387 ミリ秒。
最大
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 0、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 5374 ミリ秒、経過時間 = 2708 ミリ秒。
トップ1
SQL Server の実行時間:
CPU 時間 = 0 ミリ秒、経過時間 = 1 ミリ秒。
(写真: 1)
テーブル「マスター」。スキャン カウント 3、論理読み取り 32655、物理読み取り 0、先読み読み取り 0、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
SQL Server の実行時間:
CPU 時間 = 6797 ミリ秒、経過時間 = 3494 ミリ秒。