WHERE で絞り込み

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

Dean Smith

Founder, Atamai Analytics

WHERE の動き方

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

PlayerStats テーブル

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

WHERE の動き方

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

PlayerStats テーブル(フィルター後)

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

WHERE の処理順序

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERESELECT より先に処理されます
-- ERROR
Invalid column name 'TotalRebounds'.
SQL Serverでクエリ性能を改善する

サブクエリの活用

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- サブクエリ tr の開始
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- サブクエリで作成
ORDER BY TotalRebounds DESC;
SQL Serverでクエリ性能を改善する

サブクエリの活用

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- サブクエリ tr の開始
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- サブクエリで作成
ORDER BY TotalRebounds DESC;
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
SQL Serverでクエリ性能を改善する

列での計算

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE 条件で列に計算を行うと、クエリ時間が延びることがあります
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
SQL Serverでクエリ性能を改善する

列への関数適用

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- フィルター列への不要な関数適用
  • WHERE 条件で列に関数を適用すると、クエリ時間が延びることがあります
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
SQL Serverでクエリ性能を改善する

WHERE の簡略化

SELECT PlayerName, College, DraftYear 
FROM Players 
        -- 計算や関数は不要
WHERE College like 'Georgia%'; 
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
SQL Serverでクエリ性能を改善する

まとめ

  • WHERESELECT より先に処理されます
  • WHERE 条件で列に計算を行うと、クエリ時間が延びることがあります
  • WHERE 条件で列に関数を適用すると、クエリ時間が延びることがあります
SQL Serverでクエリ性能を改善する

練習しましょう!

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

Preparing Video For Download...