SELECTでのマテリアライズドビューとパラメタライズドクエリの使い分け
Q&A
Closed
クライアント-サーバーアプリのサーバーサイドで実行する以下のようなシンプルなSELECT文で、マテリアライズドビューとパラメタライズドクエリのどちらを使うべきか迷っています。
定義は省略していますが、T1
のId
列は主キーで、T2
~T3
のHogeId
は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
句のパラメータだけ毎回変えます。
この程度のクエリでは正直どちらの方法も実行効率は大差ないと思いますが、測定したことはありません。以下条件ではどちらを採用するべきでしょう?
-
T1
~T3
の元データの更新はほとんど起きず、各テーブルが登録されたときに値が確定する- データ更新がほぼ起こらないため、同じキーでの検索は同じ結果が返る可能性が高い
- データ件数は
T1
で100件前後、T2
で数十件、T3
で数件を想定 - 取得結果は
T2
に引きづられて決まるため高々数十件程度 - SELECT文で変わるのは
WHERE
句のId
の比較値だけ、他の条件が増えたりはしない - このクエリはクライアントの起動時に一度だけ実行する
- サーバーはC#の
EntityFrameworkCore
を使用してDB処理を実行するので、マテリアライズドビューならLinq to EntitiesでSQLを実行する
0