ページ

2005年5月17日火曜日

SQLCLR と Transact-SQL のカーソル

SQL Server 2005: Migrate cursor developed stored procedures より


上記の blog でとっても単純なテーブルに対して


select sum(cast(a.ID * b.ID as decimal))
from tableA a, tableA b


という SQL を実行すると 1秒もかからない。


同じ内容を Transact-SQL のカーソルを使ってぐるぐるループするようにした場合は 1分くらいかかる。


この Transact-SQL と同じ意味になるようにした SQLCLR (カーソルのかわりに DataReader でぐるぐるループする) の場合は 7秒くらいですむ。


だそうです。
あたり前と言えばあたり前ですが、普通の SQL ですむものはやっぱりそれが一番速いわけです。しかし、カーソルを使わなくちゃいけないような場合は SQLCLR を使う価値もあるかもしれないということになるようです。(けど、そもそもカーソルなんてなるべく使わないようにするってのが一番だと思いますが(^^; )
まぁ、カーソルうんぬんは置いておいて、これは Transact-SQL でループだとかといったロジックを組むよりは SQLCLR で組むほうが速くなる(場合がある)ということなんでしょう。ただ、どの程度の複雑さの場合にどちらが有利になるのかは一概には言えないでしょうから、場合によっては両方とも試してみる必要があるってことになっちゃいそう。

0 件のコメント:

コメントを投稿