導入

SQL Serverでクエリ性能を改善する

Dean Smith

Founder, Atamai Analytics

地震データベース

地震データベース

SQL Serverでクエリ性能を改善する

NBA シーズン 2017-2018 データベース

NBA シーズン 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 構文はすべて UPPER CASE を使用
  • 主要構文ごとに改行:SELECTFROMWHERE など
  • インデントする:
    • サブクエリ
    • ON
    • AND/OR 条件
    • 長い 1 行を避ける(例:複数の列名)
  • クエリの末尾はセミコロン (;)
  • 必要に応じて 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;

/**/ でコードやテキストのブロックをコメントアウト

Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
SQL Serverでクエリ性能を改善する

行のコメント

-- はコードやテキストの1 行をコメントアウト

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でクエリ性能を改善する

行のコメント

-- はコードやテキストの1 行をコメントアウト

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でクエリ性能を改善する

行のコメント

-- はコードやテキストの1 行をコメントアウト

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でクエリ性能を改善する

行のコメント

-- はコードやテキストの1 行をコメントアウト

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でクエリ性能を改善する

Ayo berlatih!

SQL Serverでクエリ性能を改善する

Preparing Video For Download...