改進 SQL Server 中的查詢效能
Dean Smith
Founder, Atamai Analytics
1. FROM2. ON3. JOIN4. WHERE5. GROUP BY6. HAVING7. SELECT8. DISTINCT9. ORDER BY10. TOP
SELECT *
FROM PlayerStats;
SELECT * 有利於資料探索,但可能影響效能
| PlayerName | Team | Position | ... | ... |
|---|---|---|---|---|
| Alex Abrines | OKC | SG | ... | ... |
| Quincy Acy | BRK | PF | ... | ... |
| Steven Adams | OKC | C | ... | ... |
| Bam Adebayo | MIA | C | ... | ... |
| ... | ... | ... | ... | ... |
SELECT PlayerName,
Team,
TotalPoints
FROM PlayerStats;
只選需要的欄位
| PlayerName | Team | TotalPoints |
|---|---|---|
| Alex Abrines | OKC | 353 |
| Quincy Acy | BRK | 411 |
| Steven Adams | OKC | 1056 |
| Bam Adebayo | MIA | 477 |
| ... | ... | ... |
SELECT *
FROM Players p
INNER JOIN PlayerStats ps
ON ps.PlayerName = p.PlayerName;
在 JOIN 中使用 SELECT * 會重複輸出連結欄位
| PlayerName | Age | PlayerName | Team | ... |
|---|---|---|---|---|
| Alex Abrines | 24 | Alex Abrines | OKC | ... |
| Quincy Acy | 27 | Quincy Acy | BRK | ... |
| Steven Adams | 24 | Steven Adams | OKC | ... |
| Bam Adebayo | 20 | Bam Adebayo | MIA | ... |
| ... | ... | ... | ... | ... |
SELECT p.PlayerName,
ps.Team,
p.Country,
ps.Position
FROM Players p
INNER JOIN PlayerStats ps
ON ps.PlayerName = p.PlayerName;
明確指定要回傳的欄位與所屬資料表
| PlayerName | Country | Team | Position |
|---|---|---|---|
| Alex Abrines | Spain | OKC | SG |
| Quincy Acy | USA | BRK | PF |
| Steven Adams | New Zealand | OKC | C |
| Bam Adebayo | USA | MIA | C |
| ... | ... | ... | ... |
SELECT TOP 5 PlayerName,
Team,
TotalPoints
FROM PlayerStats;
| PlayerName | Team | TotalPoints |
|---|---|---|
| Alex Abrines | OKC | 353 |
| Quincy Acy | BRK | 411 |
| Steven Adams | OKC | 1056 |
| Bam Adebayo | MIA | 477 |
| Arron Afflalo | ORL | 179 |
SELECT TOP 1 PERCENT PlayerName,
Team,
TotalPoints
FROM PlayerStats;
| PlayerName | Team | TotalPoints |
|---|---|---|
| Alex Abrines | OKC | 353 |
| Quincy Acy | BRK | 411 |
| Steven Adams | OKC | 1056 |
| Bam Adebayo | MIA | 477 |
| Arron Afflalo | ORL | 179 |
| Cole Aldrich | MIN | 12 |
| LaMarcus Aldridge | SAS | 1735 |
SELECT TOP 5 PlayerName,
Team,
TotalPoints
FROM PlayerStats
ORDER BY TotalPoints DESC
| PlayerName | Team | TotalPoints |
|---|---|---|
| LeBron James | CLE | 2251 |
| James Harden | HOU | 2191 |
| Anthony Davis | NOP | 2110 |
| Russell Westbrook | OKC | 2028 |
| Giannis Antetokounmpo | MIL | 2014 |
| 列數限制 | 排序子句 | 資料庫 |
|---|---|---|
| TOP | ORDER BY | Microsoft SQL Server |
| ROWNUM | ORDER BY | Oracle |
| LIMIT | ORDER BY | PostgreSQL |
在查詢中使用 ORDER BY:
改進 SQL Server 中的查詢效能