Введение

Повышение производительности запросов в SQL Server

Dean Smith

Founder, Atamai Analytics

База данных землетрясений

База данных землетрясений

Повышение производительности запросов в SQL Server

База данных сезона НБА 2017–2018

База данных сезона НБА 2017–2018

Повышение производительности запросов в SQL Server

База данных заказов клиентов

База данных заказов клиентов

Повышение производительности запросов в SQL Server

Удобно ли это читать?

Select ps.Team, count(p.PlayerName) 
As NonNthAmerPlayers from 
 PlayerStats ps inner 
join (select PlayerName FROM Players 
    WHERE Country <> 'USA' Or Country 
 <> 'Canada' ) 
 p on p.PlayerName = ps.PlayerName 
 group BY ps.Team
having Count(p.PlayerName) 
>=24 Order by NonNthAmerPlayers desc
Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
Повышение производительности запросов в SQL Server

Рекомендации

  • Соблюдайте единообразие
  • Пишите все ключевые слова SQL в ВЕРХНЕМ РЕГИСТРЕ
  • Начинайте новую строку для каждого ключевого оператора: SELECT, FROM, WHERE и т. д.
  • Используйте отступы:
    • Подзапросы
    • Операторы ON
    • Условия AND/OR
    • Для разбивки длинных строк, например при перечислении нескольких столбцов
  • Завершайте запрос точкой с запятой (;)
  • Используйте псевдонимы там, где необходимо, с помощью AS
Повышение производительности запросов в SQL Server

Намного лучше...

До

Select ps.Team, count(p.PlayerName) 
As NonNthAmerPlayers from 
 PlayerStats ps inner 
join (select PlayerName FROM Players 
    WHERE Country <> 'USA' Or Country 
 <> 'Canada' ) 
 p on p.PlayerName = ps.PlayerName 
 group BY ps.Team
having Count(p.PlayerName) 
>=24 Order by NonNthAmerPlayers desc

После

SELECT ps.Team, 
    COUNT(p.PlayerName) NonNthAmerPlayers
FROM PlayerStats ps
INNER JOIN
        (SELECT PlayerName 
         FROM Players 
         WHERE Country <> 'USA'
                OR Country <> 'Canada' ) p
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24
ORDER BY NonNthAmerPlayers DESC;
Повышение производительности запросов в SQL Server

Комментирование блоков

/* 
Returns a list of NBA teams with 24 or more non-North 
American players on the team roster.
*/

SELECT ps.Team, COUNT(p.PlayerName) NonNthAmerPlayers FROM PlayerStats ps INNER JOIN (SELECT PlayerName FROM Players WHERE Country <> 'USA' OR Country <> 'Canada' ) p ON p.PlayerName = ps.PlayerName GROUP BY ps.Team HAVING COUNT(p.PlayerName) >=24 ORDER BY NonNthAmerPlayers DESC;

Используйте /* и */ для комментирования блока кода или текста

Повышение производительности запросов в SQL Server

Комментирование блоков

/* 
Returns a list of NBA teams with 24 or more non-North 
American players on the team roster.
*/

SELECT ps.Team, COUNT(p.PlayerName) NonNthAmerPlayers FROM PlayerStats ps INNER JOIN (SELECT PlayerName FROM Players WHERE Country <> 'USA' OR Country <> 'Canada' ) p ON p.PlayerName = ps.PlayerName GROUP BY ps.Team HAVING COUNT(p.PlayerName) >=24 ORDER BY NonNthAmerPlayers DESC;

Используйте /* и */ для комментирования блока кода или текста

Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
Повышение производительности запросов в SQL Server

Комментирование строк

Используйте -- для комментирования отдельной строки кода или текста

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers
FROM PlayerStats ps

INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24

ORDER BY NonNthAmerPlayers DESC;
Повышение производительности запросов в SQL Server

Комментирование строк

Используйте -- для комментирования отдельной строки кода или текста

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Count of players
FROM PlayerStats ps

INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Indented qub-suery
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24

ORDER BY NonNthAmerPlayers DESC;

 

  • Комментарий, указывающий, что новый столбец содержит количество игроков

 

  • Комментарий, указывающий, что подзапрос имеет отступ
Повышение производительности запросов в SQL Server

Комментирование строк

Используйте -- для комментирования отдельной строки кода или текста

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Count of players
FROM PlayerStats ps
-- Inner join starts here
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Indented qub-suery
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24
-- Remove the ORDER BY, it is not required
ORDER BY NonNthAmerPlayers DESC;

 

 

  • Комментарий, обозначающий начало блока INNER JOIN

 

 

  • Комментарий об обязательности ORDER BY
Повышение производительности запросов в SQL Server

Комментирование строк

Используйте -- для комментирования отдельной строки кода или текста

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Count of players
FROM PlayerStats ps
-- Inner join starts here
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Indented qub-suery
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24;
-- Remove the ORDER BY, it is not required
-- ORDER BY NonNthAmerPlayers DESC

 

 

 

 

 

 

  • Оператор ORDER BY закомментирован
Повышение производительности запросов в SQL Server

Давайте потренируемся!

Повышение производительности запросов в SQL Server

Preparing Video For Download...