連載:VB研公開ゼミ議事録

第7回 ADO.NET開発初心者の疑問、解決します!

デジタルアドバンテージ 一色 政彦
2008/10/07
Page1 Page2

3. ストアド・プロシージャ vs. コードに埋め込んだSQL文

――データベース開発では、「ストアド・プロシージャ派」と「コードにSQL文を埋め込む派」の2種類に分かれていると感じているのですが、この2種類の開発手法に対する見解をお聞かせ願えないでしょうか?

福岡 ストアド・プロシージャの利点は、データアクセス・ロジックの集中が行えることです。テーブルへの操作を一括管理できます。欠点はストアド・プロシージャを記述するためのT-SQL(SQL Server)もしくはPL/SQL(Oracle Database)といった言語の習得が必要で、これらの言語を使ってSQL処理を書ける開発者が少ないことです。なお、ここではSQL CLRについては除外しています。

 コードにSQL文を埋め込む手法の利点は、気軽にSQL文を記述、修正できることです。実際にそうやってSQL文を試した後に、それをストアド・プロシージャ化してもよいと思います。欠点はデータアクセス・ロジックがさまざまなファイルに分散しやすく、どこにどのデータアクセス処理があるのかが分かりにくくなることです。

児玉 ストアド・プロシージャの場合、福岡さんがいうように、データアクセス・ロジックを集中できます。それによって、設計者が想定しないデータアクセスを個別の開発者が実装してしまうのを防げるという効能もあると思います。わたしの場合はそういった意味で、ストアド・プロシージャの利用を推奨しています。

福岡 例えばセキュリティ上の懸念で「開発者にすら、データアクセス処理を隠したい」という目的がある場合には、ストアド・プロシージャが良いでしょうね。

会場 ストアド・プロシージャの利点はロジックの集中ということですが、わたしは個人的に、コードに埋め込んだSQL文よりもストアド・プロシージャの方が、処理速度が速くて効率のよいプログラムを書ける気がしているのですが。

福岡 つまり「サーバ側でSQL文を処理した方がいいのか」「クライアント側でSQL文を処理した方がいいのか」という問題ですが、1つのSQL文を組んでデータを読み出すだけであれば、どちらも同じデータ量となりパフォーマンスはほぼ変わりません。しかし複数のSQL文をまとめて実行するような場合、例えばSQL文を発行して取得した結果を使って、さらに別のSQL文を発行して本当に必要なデータを取得したいような場合は、確実にストアド・プロシージャの方が高速です。

株式会社デジタルアドバンテージ
Insider.NET編集部
編集長
遠藤 孝信

遠藤 ところでSQL CLRは現場では使われていないのでしょうか?

福岡 データベース上のデータを操作するのは(SQL CLRよりも)ストアド・プロシージャの方が速いためか、SQL CLRはあまり使われていないようですね。SQL CLRは、ストアド・プロシージャで行えない処理、例えばCOMコンポーネントの呼び出しとか、そういった特殊なケースで使うものという立ち位置に落ち着いたように感じます。

4. どのデータベースの、どのバージョンを使うべきか?

――今回のセミナー参加者へのアンケート結果では、57%の方がAccessを使っていると回答されました。これらの開発者の方々は、このままAccessを使い続けても問題ないのでしょうか? SQL ServerなどのRDBMS(Relational Database Management System)とAccess(Jetデータベース・エンジン)の違いについてお聞きかせください。

児玉 一番違うのは、Accessでは複数ユーザーによる同時アクセスが保証されていないことです。実際に共有フォルダ上に置いたAccessデータベース(.mdbファイル/.accdbファイル)に複数のユーザーが同時に書き込んだりすると、お互いの変更を上書きしてしまったりしてデータの整合性が崩れることがあるようです。ですから、ローカル・コンピュータ上のアプリが独占的に使用するような場合を除き、一般的な業務アプリで使うことはお勧めできません。

――今回の参加者の中のSQL Server利用者では、SQL Server 2000の利用率は30%、SQL Server 2005は40%、SQL Server 2008はまだリリースされて間もないこともあり3%となっています。SQL Server 2000や2005の利用者は、やはり最新のSQL Server 2008に移行していくべきなのでしょうか?

福岡 2005から2008は、確かに運用・管理面ではさまざまな強化がなされていますが、データベース・エンジンの性能や機能という面ではそれほど大きくは変わっていないようです。しかしその前の2000から2005では、データベース・エンジンが大きく進化していますので、SQL Server 2000をお使いの方はできるだけ早く2005や2008に移行することをお勧めします。

――確かにマイクロソフトは各バージョンを「世代」という言葉で分類しており、SQL Server 7までを第1世代、2000を第2世代、2005と2008を第3世代としていますね。

遠藤 ところで、マイクロソフトは無償のデータベースとして、SQL Server 2005/2008 Express Editionを提供していますが、昔のMSDE 1.0/2000を使っている場合は、早くExpress Editionに移行した方がいいのでしょうか?

福岡 移行した方がいいですね。Express Editionでは、ファイル・サイズの上限が4Gbytes(MSDEは2Gbytes)、同時接続クライアント数が無制限(MSDEでは同時接続数は8ユーザーを超えると、ワークロード・ガバナが働き、パフォーマンスをわざと劣化させる)と、各種制限が緩められていますので*2。特にAccessデータベースを使っていたアプリは、安定したRDBMSであるExpress Editionへ移行するとよいと思います。

*2 なお、CPUとメモリ・サイズの上限については、MSDEが2CPU+2Gbytesのメモリだったのに対し、Express Editionでは1CPU+1Gbytesのメモリとなり、逆に制限が強まっている。

――無償データベースといえば、最近ではMySQLPostgreSQLなどオープンソースのデータベースが特にインターネット世界で普及してきており、実際に今回のアンケート結果でもMySQLの利用者が19%、PostgreSQLの利用者が12%と予想外に高い結果となりました。これらのオープンソース・データベースを.NET開発で利用することは現実的なのでしょうか?

福岡 オープンソース・データベースを利用する場合は、サポートについて注意しておく必要があると思います。もちろんオープンソースなので、自分でコードを修正するというのならそれでもよいのですが、そうではなく、どこかにサポートを依頼しなければならないのであれば、問題なくきちんとサポートしてくれる会社があるかどうかで、実際にオープンソース・データベースを採用するかどうかを決めればよいでしょう。

株式会社デジタルアドバンテージ
Windows Server Insider編集部
編集長
小川 誉久

――.NETではOracle Databaseも広く利用されていますが、.NETと親和性の高いSQL Serverではなく、Oracle Databaseを利用するメリットはどこにあるのでしょうか?

福岡 SQL ServerはWindows環境では非常に有力な選択肢ですが、Oracle DatabaseであればWindows環境だけでなくLinux環境など幅広いシステム環境で利用できますので、その辺りがポイントとなると思います。近年ではデータベース・エンジンの性能面は両者にそれほど大きな差はないと思います。

 最近のOracle Databaseは運用・管理面が特に強化されていて、例えばOracle Database最新バージョンの11gでは、画面上でクリックしていくだけでほぼすべての操作が行えるようになっており、運用面が本当に楽になっています。また、例えば過去にさかのぼって性能が劣化する原因となるSQL文を特定し、より効果的なSQL文の書き方を提案してくれるSQLプロファイル機能など、Oracle Database 10gのころから搭載された便利な運用・管理機能も洗練されてきています。

――ちなみにSQL Server 2008では、それにちょっと似た機能で「パフォーマンス・データ・コレクション」というものが追加され、ある時点にさかのぼって何が起こったか調べられるようになっていますね。まぁ、Oracle DatabaseとSQL Serverはそんなふうに互いに競争しながら進化しているようで、今後の発展が楽しみです。

 それでは時間となりました。本日はどうもありがとうございました。End of Article

 

 INDEX
  VB研公開ゼミ議事録
  第7回 ADO.NET開発初心者の疑問、解決します!
    1.ADOからADO.NETへの移行/ADO.NET開発の注意点
  2.ストアド・プロシージャについて/データベース・バージョンについて

インデックス・ページヘ  「VB研公開ゼミ議事録」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH