都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

SQL Server Management Studio の知っておいたほうが良い機能について挙げてみる - その7 - ( 2つの実行プランの比較してみる )

 灼熱の日曜日。Cortana さんに今日の気温を聞いてみました。40℃!
f:id:koogucc11:20160703200749p:plain
 
 別のサイトで確認。35℃。それでも暑い! Cortana さん暑さでダウンでしょうか(笑)
f:id:koogucc11:20160703201019p:plain

 梅雨が終わってしまったような天気です。今週も暑いですね。
f:id:koogucc11:20160703201228p:plain
 
 今回は非常に地味ですが、実行プランの比較機能についてです。SQL Server Management Studio(13.0.15000.23)で、WideWorldImporters を使ってためしみます。まず、下記のクエリを 実行プランを採取するために、SQL Server Management Studio で実行してみましょう。

SELECT
    i.InvoiceID,
    i.InvoiceDate,
    il.InvoiceLineID,
    il.StockItemID,
    il.Description,
    il.Quantity,
    il.UnitPrice,
    il.TaxRate,
    il.TaxAmount,
    c.CustomerID,
    c.CustomerName
FROM
    Sales.Invoices i
    INNER JOIN Sales.InvoiceLines il ON
    i.InvoiceID = il.InvoiceID
    LEFT OUTER JOIN Sales.Customers c ON
    i.CustomerID = c.CustomerID
WHERE 
    i.InvoiceID IN(1,2,3,4,5,6,7,8,9,10)
ORDER BY
    i.InvoiceID ASC,
    il.InvoiceLineID ASC

f:id:koogucc11:20160703202202p:plain

 実行プラン上で右クリックし、実行プランに名前を付けて保存をクリックします。実行プランを保存しましょう。
f:id:koogucc11:20160703204514p:plain

次に、比較対象の実行プランを取得するために、下記のクエリを SQL Server Management Studio で実行してみましょう。(使用するインデックスをスキャンするように変更しています。)

SELECT
    i.InvoiceID,
    i.InvoiceDate,
    il.InvoiceLineID,
    il.StockItemID,
    il.Description,
    il.Quantity,
    il.UnitPrice,
    il.TaxRate,
    il.TaxAmount,
    c.CustomerID,
    c.CustomerName
FROM
    Sales.Invoices i WITH(INDEX(FK_Sales_Invoices_CustomerID))
    INNER JOIN Sales.InvoiceLines il ON
    i.InvoiceID = il.InvoiceID
    LEFT OUTER JOIN Sales.Customers c ON
    i.CustomerID = c.CustomerID
WHERE 
    i.InvoiceID IN(1,2,3,4,5,6,7,8,9,10)
ORDER BY
    i.InvoiceID ASC,
    il.InvoiceLineID ASC

f:id:koogucc11:20160703202215p:plain

 先ほどと同様に、実行プラン上で右クリックし、実行プランに名前を付けて保存をクリックします。実行プランを保存しましょう。

 保存した実行プランのどちらか一方を開きます。実行プラン上で、右クリックし、プラン表示の比較をクリックします。もう一つの実行プランを開きましょう。
f:id:koogucc11:20160703210815p:plain
 
 二つの実行プランが上下に配置され、実行プランの比較が非常に容易です。
f:id:koogucc11:20160703211113p:plain

 右下の青枠部分ですが、非常に便利です。同一の SQL で実行プランが変化した時などに、どのように結合処理が変化したかなど一目で把握することができます。これ、地味に便利です。どのバージョンで機能追加されたんだろう。
f:id:koogucc11:20160703211546p:plain

 Download SQL Server Management Studio July 2016 になってますね。早速ダウンロード。
f:id:koogucc11:20160703213207p:plain

Lenovo yoga mouse ぽちった。
[asin:B00QUXSR0Q:detail]
[asin:B00ITEUUKO:detail]