• ベストアンサー

Viewにインデックスは張れますか?

件名の通りなのですが、作成したViewが遅くて困っています。 改善方法としてはViewを作成しないで従来のSQLにインデックスを張って取得する方法にしようかなと考えています。 なにかいい方法はありますか?

  • Oracle
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Viewの元テーブルに適切なIndexを貼る、ではいけないのですか?

toshi_200578
質問者

補足

元テーブルにIndexを張ればViewも速くなるのですね。 ありがとうございます。確認してみます。

その他の回答 (2)

  • sapporo30
  • ベストアンサー率33% (905/2715)
回答No.3

すでに回答が出ていますが、Viewには INDEXは張れません。 ViewでもINDEXを使用したい場合は、 元の表にINDEXを張ります。 従来のSQLとViewのスピードが同じくらい であれば、効果があがると思います。 INDEXが有効に使われない場合は、HINT分なども 効果があります。 ただ、パフォーマンスの道は、奥が深いです。 SQL Traceを取得して、ボトルネックに なっている部分を見つけると、効果的な チューニングが出来ます。

toshi_200578
質問者

お礼

そうですね。今では全体のインデックスの見直しが必要になっています。 なかなか有効にインデックスが使用されないのでヒントも多用しています。 実行計画を見ていろいろ試してみます。 ありがとうございました。

  • nopo3
  • ベストアンサー率40% (8/20)
回答No.2

Viewは所詮、複数のテーブル内の情報を結合表示する一種のエイリアスのようなものですので、実体であるテーブルのネックとなっている項目にインデックスを張ることが最善だと思います。

toshi_200578
質問者

お礼

やはりそうですよね。 実体のテーブルの見直しを行います。 ありがとうございました。

関連するQ&A

  • ビューにインデックスを設定できませんか?

    SQL Server 2005 EXPRESS を使用しています。 トランザクションのテーブルにマスタを結合して表示するビューを作成しました。 実際に利用する時はトランザクションテーブルの主キーを検索に多用すると予想されるので、該当のフィールドにインデックスを設定したいのですが… Management Studio でインデックスを設定しようとするとエラーになります。 エラーメッセージは インデックス '' の作成に失敗しました。 (Microsoft.SqlServer.Express.Smo) ------------------------------ ADDITIONAL INFORMATION: Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.Express.ConnectionInfo) ------------------------------ ビュー 'View' に インデックス を作成できません。ビューにはスキーマがバインドされていません。 (Microsoft SQL Server, Error: 1939) となっています。まさにメッセージのとおりだとは思うのですが 「ビューにスキーマをバインドする」方法がわかりません。 どなたかご教授いただければ助かります。 よろしくお願いいたします。

  • テーブルにはったインデックスは、ビューに対しても効力があるのか

    環境:RedHat Linux AS3.0 / PostgresSQL 7.3.6 Publicスキーマにインデックス付きのテーブルを作成し、 複数のスキーマにビューを作成してそのテーブルをそのまま参照したいと思っています。 (スキーマの数が非常に多いので、実体をひとつにし、  ディスク容量を抑えるのが目的です。) 環境のイメージは以下の通りです。 ◆Publicスキーマにテーブル作成------- create table TEST_TABLE ( id int, data varchar ); ◆test_tableにインデックスを作成------- create unique index TEST_KEY on TEST_TABLE ( id ); ◆test_schemaスキーマを作成------- create schema TEST_SCHEMA; ◆test_schemaスキーマにビューを作成------- create view TEST_SCHEMA.TEST_VIEW as select id, data from TEST_TABLE ; このような環境にて「TEST_VIEW」にSELECTをかけた場合、 「TEST_KEY」は踏襲されるのでしょうか? ビューに対してインデックスは作成できないようなので、 テーブルに対してはられたインデックスはビューでも生きている のではないかと考えたのですが、 上記認識で合っているかどうか ご存知の方がいらっしゃいましたらご教授頂けると助かります。 宜しくお願い申し上げます。

  • ビューが作成できない

    MSDE2000 Release Aをインストールして SQL Server Management Studio Expressを使い 最近SQLを学んでいるのですが CREATE VIEWを使うとエラーメッセージとして 'CREATE VIEW' は、クエリ バッチの最初のステートメントでなければなりません。 というような表示がされてビューを作成できません。 この場合どのようにすればこのエラーがなくなり、ビューを作成できるのでしょうか? どなたか教えてください。よろしくお願いします。

  • リストビューで最初に選択されたインデックスを取得したい

    リストビューについて質問いたします VC++5.0 & SDK で作成しています リストビューで最初に選択されたものを取得したいのですが (その選択がはずされれば次に選択されていたもの) GetFirstSelectedItemPositionはそれに相当するメッセージが 見当たらないのでSDKでは使えないようですが 何か良い方法はありませんでしょうか? よろしくお願いいたします

  • 【チューニング】インデックスとヒント句の違い

    いつもお世話になっています。 oracle9iR2を使用しています。 速度アップのためチューニングが必要なsqlが指摘されたのですが、 あるカラムにインデックスを作成すべきとの指摘がありました。 インデックスを作成するだけである程度改善される場合もあるのでしょうか? それともインデックス作成後、対象のsql/に、*+INDEX・・・ などのようにSQLにヒント句を記載してこそ効果を発揮するものなのでしょうか? 質問がまとはずれでしたら申し訳ありません。 どなたかご教授お願いします。

  • SQLServer(2005)でビューの作成がうまくいきません。

    SQLServer(2005)でビューの作成がうまくいきません。 インデックス を作成できません。ビューでは別のビュー 'View1' が参照されています。インデックス付きビューの定義で参照されるビューの定義を手作業で拡張することを検討してください。 というエラーが出ます。(参照しているビュー’View1’にもインデックスが設定されています) このエラーの回避策をご存知であれば、教えていただきたいと思います。 よろしくお願いいたします。

  • VIEWに対してWHERE句をつける

    SQLでVIEWを作成し、そのVIEWに対してSELECT文を書くときに、そのVIEWに対してWHERE句をつけるのは、パフォーマンスを必ず下げることになるのでしょうか?勝手な認識ですが、VIEWにWHERE句をつけると遅くなる場合があると聞きました。VIEWの組み方にももちろんよると思いますが、VIEWは消極的に使い、出来る限りJOINなどして結合したSQLを書くほうが無難なのでしょうか?よろしくお願いいたします。

  • Access 2003でクエリのSQLをSQLビューを表示できない

     Access 2003のアプリケーションで、そのクエリのSQLをSQLビューで表示させることができません。SQLビューを表示させる方法にお心当たりありませんでしょうか。  当該アプリケーションはAccess 2003で作成されたもので、他者が作成したものです。MDBファイルのみで稼動し、VBAで開発されたものと思われます。現象は以下の通りです。 1.既存のクエリの内容を「デザイン」で表示させたとき、ツールメニューに表示されるメニューは「ファイル」、「ウィンドウ」、「ヘルプ」の3つのみである。通常では「表示」メニューの「SQLビュー」を実行すればSQLを表示できるが、そもそも「表示」メニューがない。 2.「デザイン」を表示させているときに、デザインが表示されているウィンドウ内で右クリックをしても、ポップアップメニューが表示されない。通常なら、「SQLビュー」を含めたSQLが用意されている。  これらのために、SQLを表示させることができません。  以上、宜しくお願い致します。

  • 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句の絞り込みを行うのかどうかが気になったから です。

  • INDEXの仕様

    PostgreSQL8.1.1(RedHatLinux)にて テーブルのtext列に対してindexを作成しました。 作成した列に対して、LIKE検索を行っております。 しかし、「EXPLAIN」を利用してSQLの実行計画を見たんですが、 「Seq Scan」からしか始まらず、 「Index Scan」という文字が見当たりません。 PostgreSQLにてindexを張った列に対するLIKE検索では、 indexは使用されないのでしょうか?