都内で働くSEの技術的なひとりごと

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

実行プランの読み方をまとめてみる - その1 ( 述語 ( Predicates ) とシーク述語 ( Seek Predicates ) について説明してみる ) -

 今日は、誕生日。さらにおっさん化が進みましたww 最近、KOMBUCHA なるものがいいみたい。買ってみようかな。

ferment works KOMBUCHA classic 720ml [国産コンブチャ/紅茶キノコ]

ferment works KOMBUCHA classic 720ml [国産コンブチャ/紅茶キノコ]

HERB CORDIAL ハーブコーディアル コムブッカ 375ml

HERB CORDIAL ハーブコーディアル コムブッカ 375ml

 ふむ。
lier.jp

 ふと思ったので、自分の年齢で色々調べてみました。同い年の芸能人。
42歳の有名人
中嶋 ミチヨ(1/2) さとう 珠緒(1/2) 櫻井 淳子(1/5) 市川 染五郎(1/8) 深津 絵里(1/11) 田村 英里子(1/16) 宮前 真樹(1/16) りょう(1/17) 中山 忍(1/18) 篠原 信一(1/23) 加藤 紀子(1/30) 川田 広樹(2/1) 島崎 和歌子(3/2) 中條 かな子(3/4) 羽田 恵理香(3/7) 川越 達也(3/7) 大石 恵(3/20) 石井 正則(3/21) 青木 さやか(3/27) 八木沼 純子(4/1) 大泉 洋(4/3) 鼠先輩(4/5) 宮沢 りえ(4/6) ボビー・オロゴン(4/8) 本田 みずほ(4/22) 設楽 統(4/23) たむら けんじ(5/4) 武井 壮(5/6) 赤坂 晃(5/8) 梨花(5/21) 飯塚 悟志(5/27) アントキの猪木(6/8) 中澤 裕子(6/19) 吉田 敬(6/27) GACKT(7/4) 小杉 竜一(7/5) 袴田 吉彦(7/16) 小川 範子(7/20) くまだ まさし(7/26) 友近(8/2) 安住 紳一郎(8/3) 篠原 涼子(8/13) スギちゃん(8/24) 佐藤 アツヒロ(8/30) 水森 かおり(8/31) 三浦 理恵子(9/1) 小籔 千豊(9/11) 藤谷 美紀(9/15) 大貫 亜美(9/18) 小沢 一敬(10/10) ドロンズ 石本(10/11) 金城 武(10/11) 松嶋 菜々子(10/13) 堺 雅人(10/14) イチロー(10/22) はしの えみ(10/23) マギー 審司(11/11) 浅野 忠信(11/27) 長谷川 理恵(12/1) 池谷 直樹(12/1) 田村 淳(12/4) 稲垣 吾郎(12/8) 安田 顕(12/8) 角田 晃広(12/13) 武田 真治(12/18) 寺島 しのぶ(12/28)

 GACKT すげぇ。
www.excite.co.jp

 芸能人以外も。
www.tanjoubi.org

 こんなサイトあるのか。
birthdaygift.web.fc2.com
 
 いいね♪
https://youtu.be/hzH4ORpw6hw
星野源が歌う日村さん42歳誕生日の歌

 星野源
www.hoshinogen.com


 本題に戻りましょう。今回から何回かに分けて今後の勉強会のネタとして、実行プランの読み方を記事にしたいと思います。プロジェクトで開発者の SQL を見ていると、( 述語 ( Predicates ) とシーク述語 ( Seek Predicates ) を見てなさそうな感じの SQL が目立ちます。今回は、SQL Server 2016 CTP3.1、AdventureWorks2016CTP3 を使用します。AdventureWorks2016CTP3 は下記のサイトからダウンロードできます。
Download AdventureWorks Sample Databases and Scripts for SQL Server 2016 CTP3 from Official Microsoft Download Center

それでは、早速試してみましょう。下記の SQLSQL Server Management Studio で実行します。

SELECT
    AddressID,
    AddressLine1,
    AddressLine2,
    City,
    StateProvinceID,
    PostalCode,
    SpatialLocation,
    rowguid,
    ModifiedDate
FROM
    Person.Address
WHERE
    AddressLine1 = N'Attaché de Presse' AND 
    PostalCode = N'75007'

f:id:koogucc11:20151213134857p:plain

 実行プランを見る限り、キー参照が発生していますが、特に大きな問題は見当たりません。もう少し実行プランを詳しくみてみましょう。青枠部分に着目してください。
f:id:koogucc11:20151213135539p:plain

 一見問題ないようにみえますか、今回の Where 句の指定の仕方だと、下図のように AddressLine1 の条件でインデックスを Seek し、PostalCode で Scan します。
f:id:koogucc11:20151213143022p:plain

 解決するには、既存のインデックスに適合するように WHERE 句の条件を見直すか、条件に適合するインデックスを作成します。ここでは、AddressLine1,PostalCode のインデックスを作成してみます。これで、AddressLine1、PostalCode で Seek することができました。
f:id:koogucc11:20151213145012p:plain

 上記のような状態がすべて悪いというわけではありません。ただ、このような状態を見逃して、きちんとしたパフォーマンスチューニングが出来ていない状況が多く見受けられます。オペレータが、Index Seek になっていてもきちんとプロパティを参照して、問題ないか見極めましょう。

SQL Server 2016 の本が、2016/6/15 販売ということは...

SQL Server 2016 High Availability Unleashed  (includes Content Update Program)

SQL Server 2016 High Availability Unleashed (includes Content Update Program)