SQL CLR vs. Transact-SQLの真実
株式会社システムインテグレータ
石橋 潤一
2005/9/6
■Transact-SQLか? SQL CLRか? パフォーマンスで勝負!
さて、ここまで紹介してきたSQL CLRは、開発は簡単、セキュリティも考慮され開発生産性も上がり多様なライブラリ資源も使える、といいことづくめのようですが、今後ストアドプロシージャの開発はすべてSQL CLRに置き換わるでしょうか。マイクロソフト社の動きを見ていると、SQL CLR一本に絞ろうとしているわけではなさそうです。SQL Server 2005ではTransact-SQLは廃止に向かうどころか逆に強化され、再帰クエリやPIVOTクエリ、例外処理などの機能が実装される予定です。
ここで気になるのが、開発生産性の高いSQL CLRと機能強化されたTransact-SQL、どちらの言語でストアドプロシージャの開発を行うか、という問題です。この2つの言語を選択するに当たって、さまざまな視点があると思いますが、ストアドプロシージャを利用する動機の1つであるパフォーマンスに絞って比較してみたいと思います。
用意したのは、SQL Server 2005のサンプルデータベースであるAdventureWorks内のSalesOrderHeaderテーブルより、顧客ごとの総受注額を求め、それを新たに用意したテーブルに書き込む単純なプログラムです。データ量としては、約2万件となります。
![]() |
図1 実験用プログラムにおけるデータの流れ 顧客ごとの注文をグループ化し、注文合計額を1件ずつCustTotaldue表にINSERTする。 |
コードは先ほどのサンプルを少し改造した程度で、どちらもループを回してデータを処理しています。また、Transact-SQL、SQL CLRに加え、ASP .NETを利用してSQL CLRと同じコードを実行するプログラムを作成しました。ASP .NETのコードはSQL Server 2005と同じサーバ上で実行されています。実験を行ったところ、次のような結果となりました。
使用言語 | 処理にかかった時間 |
Transact-SQL | 8秒 |
SQL CLR | 10秒 |
ASP .NET | 14秒 |
表2 2万件のデータ呼び出しとINSERTの処理が終了するまでの時間(平均値) |
単純なプログラムと少ないデータではありますが、如実に実行スピードの差が生まれています。Transact-SQLとSQL CLRは同じSQL Serverのプロセス内で実行されますが、やはり長年蓄積された構造解析技術などの差により、パフォーマンスではTransact-SQLが有利なようです。また、同じサーバ上で実行していたとしても、プロセスの外からデータを処理するASP .NETは、パフォーマンスの問題が大きいことが分かります。
以上のことを踏まえると、通常のクライアント・プログラムを含めたストアドプロシージャ(Transact-SQLとSQL CLR)の使い分けは次のような形になることが考えられます。
![]() |
図2 Transact-SQLとSQL CLRの使い分け SQL CLRはパフォーマンスと生産性の両立を求められるような困難な処理に対して有効な解決策となる。 |
システムの規模や求められるパフォーマンスによっては、Transact-SQLを利用しなければならない場面が今後も予想され、SQL CLRでTransact-SQLを完全に置き換えることは難しいでしょう。しかしながら、生産性とパフォーマンスを両立したSQL CLRは大規模・複雑化するシステム開発における大きな武器となるはずです。
◇
これまで、SQL Serverを利用したアプリケーションを開発する際、大量のデータ処理を行うのはTransact-SQL、そのほかはクライアントプログラム、という形に二極化していましたが、ここにパフォーマンスと生産性の両立を目指したSQL CLRが登場しました。Transact-SQLの苦手とするところを補完し、同時にパフォーマンスや生産性、セキュリティ面での配慮も提供するSQL CLRの利用は、今後確実に広がっていくものと思われます。様子見を決め込んでいる方も多いとは思いますが、Transact-SQLに苦しめられていたり、処理の遅いプログラムに悩まされているならば、この機会にSQL CLRに触れてみることをお勧めします。(次回に続く)
筆者プロフィール |
石橋潤一 株式会社システムインテグレータ勤務。Web+DBの業務アプリをメインに開発に携わる。ストアドに涙した日々の経験を基に、今回の執筆を通してSQL CLRの布教を行う予定。著書に『DBマガジン別冊 SQL Server 2005徹底活用ガイド』(翔泳社刊/共著)、『ASP.NET+SQL Server ゼロからはじめるWebアプリケーション』(ソフトバンクパブリッシング刊/共著)。 |
![]() |
3/3 |
Index | |
連載:SQL Server 2005 CTPレビュー(開発者編) SQL CLR vs. Transact-SQLの真実 |
|
Page
1 ・SQL CLRが開発者に与えるインパクト |
|
Page 2 ・SQL CLRでコーディングはどう変わるか |
|
![]() |
Page 3 ・Transact-SQLか? SQL CLRか? パフォーマンスで勝負! |
![]() |
SQL Server 2005 CTPレビュー |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
![]() |
|
|
|
![]() |