Изучение после 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

SELECT * в JOIN

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

SELECT * в JOIN-запросах возвращает дублирующиеся столбцы объединения

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...