代替手法 2

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

Dean Smith

Founder, Atamai Analytics

INNER JOIN

SELECT c.CustomerID
      ,c.CompanyName
      ,o.OrderID
      ,o.OrderDate
      ,o.ShippedDate
      ,o.Freight
FROM Customers c
INNER JOIN Orders o
    ON c.CustomerID = o.CustomerID
CustomerID CompanyName OrderID ...
VINET Vins et alcools Chevalier 10248 ...
HANAR Hanari Carnes 10250 ...
VICTE Victuailles en stock 10251 ...
SUPRD Suprêmes délices 10252 ...
... ... ... ...
SQL Serverでクエリ性能を改善する

LEFT OUTER JOIN

包括的 LEFT OUTER JOIN

Venn Diagram Inclusive Left Outer Join

排他的 LEFT OUTER JOIN

Venn Diagram Exclusive Left Outer Join

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

排他的 LEFT OUTER JOIN

SELECT c.CustomerID
      ,c.CompanyName
      ,o.OrderID
      ,o.OrderDate
      ,o.ShippedDate
      ,o.Freight
FROM Customers c
LEFT OUTER JOIN Orders o
    ON c.CustomerID = o.CustomerID
WHERE o.CustomerID IS NULL
CustomerID CompanyName OrderID ...
FISSA FISSA Fabrica Inter. Salchichas S.A. NULL ...
PARIS Paris spécialités NULL ...
SQL Serverでクエリ性能を改善する

復習: INTERSECT と EXCEPT

INTERSECT: 存在を確認

EXCEPT: 不在を確認

利点

  • データの検証に有効
  • 返却結果の重複を除去

欠点

  • クエリ間で SELECT の列数と順序が同一である必要
SQL Serverでクエリ性能を改善する

復習: EXISTS と NOT EXISTS

EXISTS: 存在を確認

NOT EXISTS: 不在を確認

利点

  • TRUE になった時点でサブクエリの探索を終了
  • 外側クエリの任意の列を任意順で返せる

欠点

  • 結果に含められるのは外側クエリの列のみ
SQL Serverでクエリ性能を改善する

復習: IN と NOT IN

IN: 存在を確認

NOT IN: 不在を確認

利点

  • 外側クエリの任意の列を任意順で返せる

欠点

  • 結果に含められるのは外側クエリの列のみ
  • サブクエリ内の null への NOT IN の扱いにより結果が返らない場合がある
SQL Serverでクエリ性能を改善する

復習: INNER JOIN と排他的 L.O.J

INNER JOIN: 存在を確認

排他的な LEFT OUTER JOIN: 不在を確認

利点

  • 結合した全クエリの任意の列を任意順で返せる

欠点

  • 排他的 LEFT OUTER JOIN では IS NULLWHERE に追加する必要
SQL Serverでクエリ性能を改善する

練習しましょう!

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

Preparing Video For Download...