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

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

"The Pains of Filtered Indexes" フィルター化インデックスの落とし穴にはまってみた

 最近、フィルター化インデックスがうまく使用できないことで、はまってました。MSDN Blog でこの記事を見つけました。
 
 記事の題名は、『 The Pains of Filtered Indexes 』。ほう。興味のそそられる記事ですね。早速確認してみましょう。フィルター化インデックスを WITH 句で指定し、実行すると下記のようなエラーが発生します。
f:id:koogucc11:20150519201332p:plain

 対応するには、ほう....

While incredibly useful, you can see that filtered indexes do have some drawbacks when it comes to how they can be applied. In most cases, the best way to take advantage of the filtered indexes you have is through the use of dynamic string execution. In this case I was lazy and just modified how I was using sp_executesql. The EXECUTE statement would have worked just as well.

 動的に文字列連結した結果を executesql したらいいんですね。

DECLARE @SQL NVARCHAR(MAX), @ProductID INT 
SET @ProductID = 870 
SET @SQL = N'SELECT ProductID 
FROM Sales.SalesOrderDetail  
WHERE ProductID = ' + CAST(@ProductID AS VARCHAR(10)) 
EXECUTE sp_executesql @SQL 

f:id:koogucc11:20150519201627p:plain

 インデックスひとつとっても奥が深いですね。まだまだ、修行がたりません。今回は他力で終了です...(一切検証していません。)

※ある程度は、力を抜いていかないと。

適当教典 (河出文庫)

適当教典 (河出文庫)