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

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

SQL Server Management Studio の知っておいたほうが良い機能について挙げてみる - その3 - ( 実行プランのテキスト表示 )

 実行プランの見方で、グラフィカルに表示する方法とそうでない方法があります。一般的には、下図のような実行プランが通常使用されるかと思います。

f:id:koogucc11:20130927214010j:plain

 ぱっと見るのにはいいのですが、どのような順序で評価され、処理されているのは、テキスト形式の方が見やすいと思っています。(個人的にかもしれませんが...)実行プランをテキスト表示するには、クエリエディタの中で下記のようなステートメントを記述します。

SET STATISTICS PROFILE ON

 上記のステートメントの後にクエリを記述し、実行すると下図のように表示されます。

f:id:koogucc11:20130927214409j:plain

Select* from [Production].[Product] a JOIN [Production].[ProductCategory] b ON a.ProductID  = b.ProductCategoryID
  |--Nested Loops(Inner Join, OUTER REFERENCES:([b].[ProductCategoryID]))
       |--Clustered Index Scan(OBJECT:([AdventureWorks2012].[Production].[ProductCategory].[PK_ProductCategory_ProductCategoryID] AS [b]))
       |--Clustered Index Seek(OBJECT:([AdventureWorks2012].[Production].[Product].[PK_Product_ProductID] AS [a]), SEEK:([a].[ProductID]=[AdventureWorks2012].[Production].[ProductCategory].[ProductCategoryID] as [b].[ProductCategoryID]) ORDERED FORWARD)

 『 |-- 』がそれぞれの処理単位です。インデントの階層により、どのような順番で処理されているか、ひと目でわかるようになっています。実際の処理の評価は、下から上にされるようになっています。みやすいですよね?