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

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

SQL Server のチューニングについてまとめてみる - その17 - ( FOR XML PATH の連結をもう少し高速化してみる )

 最近、2日から3日家にいません。土日も結構仕事になることが多い今日この頃...今日は名古屋に行って、わらじみそかつを食べてきました。やばとんのみそかつは美味しいですね。
f:id:koogucc11:20160201135717j:plain
www.yabaton.com

 今回は文字列連結を少しでも高速化 ( 新幹線でぼーっと考えてました ) してみます。過去の記事で FOR XML PATH の文字列連結について記載しています。
ryuchan.hatenablog.com
ryuchan.hatenablog.com
 
 FOR XML PATH を使ったサンプルは下記の通りです。

DECLARE @str NVARCHAR(MAX)

SET @str = ( SELECT
                 'a=' + CAST ( OrderTrackingID AS NVARCHAR ) +
                 ',b=' + CAST ( SalesOrderID AS NVARCHAR ) +
                 ',c=' + CarrierTrackingNumber
             FROM
                 Sales.OrderTracking 
             FOR XML PATH('')
            ) 

PRINT @str

 これを、SQL Server 2012 からサポートされた CONCAT 関数を使用すると下記の通りになります。

DECLARE @str NVARCHAR(MAX)

SET @str = ( SELECT 
                 CONCAT( 'a=',
                         CAST( OrderTrackingID AS NVARCHAR ),
                         ',b=', 
                         CAST( SalesOrderID AS NVARCHAR ) ,
                         ',c=', 
                         CarrierTrackingNumber )
             FROM
                 Sales.OrderTracking
             FOR XML PATH('')
            )

PRINT @str

※CONCAT は CAST しなくてもいいですが、CAST してあげた方が若干高速でした。そんなもんでしょう。

 約 10 % 程度 ( 超ざっくり検証www ) ですが、CONCAT を使用したほうが高速ですね。細かいチューニング大切です。塵積です、チューニングは。

ほしい♪
www.chums.jp

新しいリュックほしい♪

[チャムス] CHUMS Eco Hurricane Day Pack CH60-0845 BK (Black)

[チャムス] CHUMS Eco Hurricane Day Pack CH60-0845 BK (Black)