SELECT 之后的筛选

改进 SQL Server 中的查询性能

Dean Smith

Founder, Atamai Analytics

SELECT 之后的处理顺序

1.  FROM

2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. HAVING
7. SELECT
8. DISTINCT
9. ORDER BY
10. TOP
改进 SQL Server 中的查询性能

并非"全选"都好

SELECT *
FROM PlayerStats;

SELECT * 便于探索数据,但可能影响性能

PlayerName Team Position ... ...
Alex Abrines OKC SG ... ...
Quincy Acy BRK PF ... ...
Steven Adams OKC C ... ...
Bam Adebayo MIA C ... ...
... ... ... ... ...
改进 SQL Server 中的查询性能

只取所需更好

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
... ... ...
改进 SQL Server 中的查询性能

JOIN 中的全选

SELECT * 
FROM Players p
  INNER JOIN PlayerStats ps
  ON ps.PlayerName = p.PlayerName;

在连接中使用 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 ...
... ... ... ... ...
改进 SQL Server 中的查询性能

JOIN 中你需要的一切

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
... ... ... ...
改进 SQL Server 中的查询性能

取前几行(TOP)

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
改进 SQL Server 中的查询性能

按百分比取前几行(TOP)

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
改进 SQL Server 中的查询性能

没有"顶部"或"底部"之分

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
改进 SQL Server 中的查询性能

其他行限制方式

行限制子句 排序子句 数据库
TOP ORDER BY Microsoft SQL Server
ROWNUM ORDER BY Oracle
LIMIT ORDER BY PostgreSQL
改进 SQL Server 中的查询性能

何时使用 ORDER BY

在查询中使用 ORDER BY

  • 用于探索数据
  • 当确有理由让最终结果排序时
改进 SQL Server 中的查询性能

开始练习!

改进 SQL Server 中的查询性能

Preparing Video For Download...