- 締切済み
Viewを作ると遅くなる?
Viewを作成してそのViewに対してWhere句で条件を付けて検索する場合と、 Viewを作成せずに直接Where句で条件を付けて検索する場合と、どちらが パフォーマンスがよいでしょうか? (1)Viewを使わない例 SELECT 伝票番号,伝票日付,金額 FROM 伝票 WHERE 伝票番号=1 (2)Viewを使う例 あらかじめViewを作成しておく CREATE VIEW TEST_VIEW AS SELECT 伝票番号,伝票日付,金額 FROM 伝票 以下のSQL文を発行する SELECT * FROM TEST_VIEW WHERE 伝票番号=1 このような質問をした訳は、元となるテーブルの全件を対象とした Viewを作った場合、毎回テーブルフルスキャンを行ってViewを作成 したあとにWHERE句の絞り込みを行うのかどうかが気になったから です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- t_ohta
- ベストアンサー率38% (5238/13705)
インデックスが無ければどちらも大差無いと思います。 実行プランを確認しないと確実な事は言えませんが、例示されているようなVIEWなら元テーブル上で検索してからVIEWデータを作るような実行プランになる可能性が高いと思います。 MS SQL ServerならVIEWにもインデックスを付けられるので、インデックスを適切に張ればVIEWも高速に検索できます。
- maiko0318
- ベストアンサー率21% (1483/6969)
2)の方が速いです。 元テーブルのデータはバラバラに入っています。 ので、条件や並び替えを使うと全件を読み込んでデータを引っ張ってきます。 条件にや並び替えにかなったビューを作ればデータの一部だけ読みこむようになり、 速く検索することができます。 ただ、だからといってビューをたくさん作るとデータの更新・削除・登録の時に、 ビューのほうもデータの更新・削除・登録が必要になり、遅くなります。