- ベストアンサー
テーブルにはったインデックスは、ビューに対しても効力があるのか
環境: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」は踏襲されるのでしょうか? ビューに対してインデックスは作成できないようなので、 テーブルに対してはられたインデックスはビューでも生きている のではないかと考えたのですが、 上記認識で合っているかどうか ご存知の方がいらっしゃいましたらご教授頂けると助かります。 宜しくお願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ビューは仮想的なテーブルで、呼ばれたときに、実際に定義部分に書かれた、SELECT文が実行されます。 したがって、踏襲もなにも・・・ select id, data from TEST_TABLE が、実行されるんですから、インデックスは活きます。
その他の回答 (1)
- zebedeer
- ベストアンサー率66% (80/121)
使われると思いますよ。 とりあえず、EXPLAINしてみては?
お礼
ご回答ありがとうございます。 明日、さっそく試してみてまた返信致します。
補足
環境を作成しEXPLAINをしてみたところ、Index Scan されていました。 上のmasayuki0511さんからのご説明の通り、インデックスはビューからも使用可能なのですね。 zebedeerさん、ありがとうございました。 (恥ずかしながらEXPLAINを初めて使ったので、勉強になりました!)
お礼
ご回答ありがとうございます。 下にも書いたとおり、実際に試してインデックスが使用されていることを確認しました。 よく考えてみれば、ビューは実際にテーブルにSELECTをかけに行くのだから、インデックスが使用できるのは当たり前ということですね。すこし勘違いしていた部分があったようですが、おかげさまで理解できました。 ありがとうございました。