ry18847
@ry18847

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SELECTでのマテリアライズドビューとパラメタライズドクエリの使い分け

Q&A

Closed

クライアント-サーバーアプリのサーバーサイドで実行する以下のようなシンプルなSELECT文で、マテリアライズドビューとパラメタライズドクエリのどちらを使うべきか迷っています。
定義は省略していますが、T1Id列は主キーで、T2T3HogeIdはT1の外部キーです。

SELECT T1.Id, T2.Name, T3.Number
FROM Hoge T1
INNER JOIN Fuga T2 ON T2.HogeId = T1.Id
INNER JOIN Piyo T3 ON T3.HogeId = T1.Id
WHERE T1.Id = "クライアントから送られてきたキー値"

マテリアライズドビューならWHERE句の前の行までをビュー定義にしてプログラム実行時にWHERE文を指定して実行します。パラメタライズドクエリならSQLは固定でWHERE句のパラメータだけ毎回変えます。

この程度のクエリでは正直どちらの方法も実行効率は大差ないと思いますが、測定したことはありません。以下条件ではどちらを採用するべきでしょう?

  • T1T3の元データの更新はほとんど起きず、各テーブルが登録されたときに値が確定する
    • データ更新がほぼ起こらないため、同じキーでの検索は同じ結果が返る可能性が高い
  • データ件数はT1で100件前後、T2で数十件、T3で数件を想定
  • 取得結果はT2に引きづられて決まるため高々数十件程度
  • SELECT文で変わるのはWHERE句のIdの比較値だけ、他の条件が増えたりはしない
  • このクエリはクライアントの起動時に一度だけ実行する
  • サーバーはC#のEntityFrameworkCoreを使用してDB処理を実行するので、マテリアライズドビューならLinq to EntitiesでSQLを実行する
0

1Answer

C#特有の用語だと分からないですが、どちらか迷うものではなくパラメーター化されたクエリは常に使います。
マテリアライズドビューを使うとしても、パラメーターも使います。

ビュー、マテリアライズドビューは
http://mickindex.sakura.ne.jp/database/db_view.html
ここに書いているようなメリット・デメリットをよく考えて、必要があれば使います。

0Like

Comments

  1. @ry18847

    Questioner

    ご回答ありがとうございました。

Your answer might help someone💌