- ベストアンサー
ビューテーブル
初心者的な質問です。 オラクルデータベースで、検索速度向上の為に ビューテーブルを作る事になりました。 ちょっといまいちわからないのですが、検索条件を 項目として作れば良いのでしょうか?? また、ビューテーブルを作って場合に、そのテーブルに データが入るタイミングとかってどうなっているのでしょうか?? ビューを使わないとしたら 7つのテーブルを参照して、検索をしなければなりません。 環境は、Webです。 ASPからUNIXのオラクル8にアクセスしています。 補足する必要があれば言って下さい。 可能な限り書きます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
既にみなさんがおっしゃってますように、「ビュー」はそもそも検索速度を向上させるためのものではありません。 また、「ビュー」と「テーブル」は異なるものです。 実データが格納されているものを「テーブル」といい、SELECTステートメントをOracle内にコンパイルしたものが「ビュー」といいます。 もっとかみ砕いて言いますと、「ビュー」はよく使う検索手順を定義したもので日本語では「仮想表」と言います。 つまり、実際は「テーブル」にあるデータを定義された「ビュー」により検索した結果、あたかも「テーブル」のように見えているだけで、「ビュー」に対してデータを追加するわけでもありません。 基本的にデータを追加するのは「テーブル」に対して行います。 抜本的に検索速度を向上させるためには、通常は「インデックス(索引)」を使います。 これについて、詳しくはマニュアル等をご参照ください。 また、ビューを定義することにより、確かに少しだけ検索速度を向上させることも可能です。 既にSELECT分をサーバー内でコンパイルされているため、OracleがSELECT分の解析する必要がなく、ほんの0.1秒に満たないほど速くなります。 しかし、0.1秒速くしたところであまり意味はありませんので、ビューによって検索速度を向上させるという考え方は捨ててください。 また、ビューを定義することとは別問題ですが、SELECT * とせずに、必要なフィールドのみを検索すること、あるいは表を結合したり副問い合わせを使って速度を向上させることも可能です。 これに関してはSELECT文の書き方によって、検索効率を上げる方法ですね。
その他の回答 (2)
- misoka
- ベストアンサー率35% (56/160)
ビューというのは、要はSELECT文に名前がついているようなものです(?)。 モデル的なCREATE VIEWは、こんな感じですが... CREATE VIEW ビュー名( 項目名1 , 項目名2 , 項目名3 ... ) AS SELECT 別名1.列名1 , 別名1.列名2 , 別名2.列名1 ... FROM テーブル名1 別名1 , テーブル名2 別名2 ... WHERE 結合条件式など ; 要するに、AS 以下のSELECTで抽出した内容に、ビュー名でアクセスできる、 ということです。ビューでアクセスしても、内部で抽出の処理が走ります。 ビューを作ったところで、オラクルが抽出内容を常時保持するわけでは ありません。一般にビューは、レスポンス改善には、役立たないものです。 むしろ、参照するテーブルに貼られているINDEXとか、テーブルの パーティショニング等に配慮すべきなのかもしれません。 (状況によるので、ハッキリしたことは言えませんが...) # SELECT文をネストさせると、レスポンスが向上する場合もあります。
- msystem
- ベストアンサー率42% (79/186)
言葉がよくわからないので説明お願いします。 ビューテーブルというのは、ビューのことでしょうか?それとも、8iからつかえるマテリアライズドビューのことでしょうか? もし、ただのビューのことであれば、検索速度の向上にはつながりません。(向上するとすれば、長いSQL文を投げるのが短くなる文のネットワークの転送速度分のみです) ビューは、そのビューへアクセスされたときに、SQL文を解析し各テーブルを参照しに行きます。
補足
普通のビューです。 検索速度の向上にはつがらないのですか・・・・・・・