改进 SQL Server 中的查询性能
Dean Smith
Founder, Atamai Analytics

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 执行时间:
CPU 时间 = 390 ms,耗时 = 382 ms。
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);
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。
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。
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。
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。
EXISTSSELECT 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。
耗时(Elapsed time)
CPU 时间
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 中的查询性能