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

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

SQL Server のチューニングについてまとめてみる - その14 - ( 少しでもオーバーヘッドを少なくしてみる )

今回やることを説明してみる

 少しでも高速化するために、SET NOCOUNT ON を使用します。

使用する環境を説明してみる

 Microsoft Azure 上の SQL Server 2014 を使用します。

早速試してみる

 以下のクエリを実行してみましょう。

select * from [Production].[WorkOrder]

f:id:koogucc11:20150103100117p:plain
f:id:koogucc11:20150103100158p:plain
 上図の下の画像で書きのように出力されています。

(72591 row(s) affected)

 これは SQL Server がクエリ実行時に何件ヒットしたか、更新したかなどをクライアント側へ通知しています。これもネットワークのオーバーヘッドとなってしまうので、無効化したほうがいいものです。無効化するには、下記のようにクエリを書きなおします。

SET NOCOUNT ON
select * from [Production].[WorkOrder]
SET NOCOUNT OFF

 クエリを実行してみましょう。
f:id:koogucc11:20150103100924p:plain
 先ほどのクエリのように、

(72591 row(s) affected)

ではなく、

Command(s) completed successfully.

と表示されています。これで、件数を返すためのオーバーヘッドを取り除くことができました。

おわりになにか言ってみる

 チューニングは地道に続けましょう。

SQL Server Tuning Scripts: Performance Optimization Secrets

SQL Server Tuning Scripts: Performance Optimization Secrets