Improving Query Performance in SQL Server
Dean Smith
Founder, Atamai Analytics
SELECT CountryName,
Code2,
Capital,
Pop2017
FROM Nations
INNER JOIN Cities
ON Capital = CityName;
-----------------------------------------------
-- ERROR, Pop2017 column is in
both the Nations and Cities tables
Ambiguous column name 'Pop2017'.
-- Alias tables; Nations as n and Cities as c
SELECT n.CountryName,
n.Code2,
n.Capital,
c.Pop2017 -- City population
FROM Nations AS n
INNER JOIN Cities AS c
ON n.Capital = c.CityName;
| CountryName | Code2 | Capital | Pop2017 |
|---|---|---|---|
| United Kingdom | GB | London | 346774 |
| Canada | CA | Ottawa | 874433 |
| France | FR | Paris | 10437 |
| Reunion | RE | Saint-Denis | 1067 |
| ... | ... | ... | ... |
-- Alias columns;
SELECT n.CountryName AS Country,
n.Code2 AS CountryCode,
n.Capital,
c.Pop2017 AS Population
FROM Nations AS n
INNER JOIN Cities AS c
ON n.Capital = c.CityName;
| Country | CountryCode | Capital | Population |
|---|---|---|---|
| United Kingdom | GB | London | 346774 |
| Canada | CA | Ottawa | 874433 |
| France | FR | Paris | 10437 |
| Reunion | RE | Saint-Denis | 1067 |
| ... | ... | ... | ... |
-- New colunm aliased as MaxMagnitude
SELECT Country,
NearestPop AS City,
MAX(Magnitude) AS MaxMagnitude
FROM Earthquakes
GROUP BY Country, NearestPop;
| Country | City | MaxMagnitude |
|---|---|---|
| PE | Acar | 7.1 |
| US | Aguadilla | 7.7 |
| MX | Aguililla | 7.2 |
| PW | Airai | 7.8 |
| PG | Aitape | 7.6 |
| ... | ... | ... |
SELECT n.CountryName AS Country,
n.Capital,
e.MaxMagnitude
FROM Nations n
INNER JOIN
(SELECT Country, NearestPop AS City
,MAX(Magnitude) AS MaxMagnitude
FROM Earthquakes
GROUP BY Country, NearestPop) e
-- Sub-query aliased as e
ON n.Code2 = e.Country AND n.Capital = e.City;
| Country | Capital | MaxMagnitude |
|---|---|---|
| Fiji | Suva | 7.9 |
| Guam | Hagatna | 7.8 |
| Peru | Lima | 7.6 |
| Turkmenistan | Ashgabat | 7.3 |
| ... | ... | ... |
Improving Query Performance in SQL Server