Вступ

Покращення продуктивності запитів у SQL Server

Dean Smith

Founder, Atamai Analytics

База даних Earthquakes

База даних про землетруси

Покращення продуктивності запитів у SQL Server

База даних NBA Season 2017–2018

База даних сезону NBA 2017–2018

Покращення продуктивності запитів у SQL Server

База даних Customer Orders

База даних замовлень клієнтів

Покращення продуктивності запитів у 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
Команда 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

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

/* 
Повертає список команд NBA, у яких 24 чи більше 
нене північноамериканських гравців у заявці.
*/

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

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

/* 
Повертає список команд NBA, у яких 24 чи більше 
нене північноамериканських гравців у заявці.
*/

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;

Використовуйте /* і */, щоб коментувати блок коду або тексту

Команда 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 -- Кількість гравців
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 -- Кількість гравців
FROM PlayerStats ps
-- INNER JOIN починається тут
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 — він не потрібен
ORDER BY NonNthAmerPlayers DESC;

 

 

  • Коментар, що перед INNER JOIN — розділювальна пауза

 

 

  • Коментар про необов'язковість ORDER BY
Покращення продуктивності запитів у SQL Server

Коментарі до рядків

Використовуйте --, щоб закоментувати одну лінію коду або тексту

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Кількість гравців
FROM PlayerStats ps
-- INNER JOIN починається тут
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 — він не потрібен
-- ORDER BY NonNthAmerPlayers DESC

 

 

 

 

 

 

  • Закоментований вираз ORDER BY
Покращення продуктивності запитів у SQL Server

Давайте потренуємось!

Покращення продуктивності запитів у SQL Server

Preparing Video For Download...