• ベストアンサー

VIEWの元のテーブルのindexって有効なのでしょうか?

VIEWの元のテーブルのindexって有効なのでしょうか? MYSQLサーバのバージョンは5.0.77です。 どうぞよろしくお願いします。

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

  • ベストアンサー
回答No.2

ビューの基表に、有効活用できるインデクスがあれば、インデクスは活用されます。 >例えば元のテーブルに「hoge_id(index)」があり、 >VIEWテーブルが「vtable」だとします。 >SELECT * FROM vtable WHERE hoge_id = 値 >または、 >SELECT * FROM vtable LEFT JOIN atable ON vatble.hoge_id = atable.id >(atable.idもindex) >などとした場合、hoge_idのindexが有効で高速に結果が返ってくるということでよろしいのでしょうか。 表の母体データ件数が相当に少ない(例えば、数百件など)とか、重複キー値が多量に存在するといった場合は、RDBMSのオプティマイザが、「インデクスを使うより、テーブルスキャン(表のデータを全件サーチ)した方が速い」と判断し、インデクスを利用しない場合もあります。 主キーなどユニークなキーでの「=」条件や範囲条件などで、母体データからある程度絞り込んだ検索をするなら、インデクスの活用で母体データが大量に増えても、一定の性能を出せます。

beginner001
質問者

お礼

chukenkenkou 様、ご回答有難うございます。 なるほど、期待以上の答えを頂きました。 どうも有難うございました。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

有効です。VIEWにはINDEXは作れませんし。

beginner001
質問者

お礼

SaKaKashi 様、ご回答ありがとうございます。 有効なんですね。 安心しました。 えと、、 ちょっと自分の質問が説明不足だったせいで少し不安なので再確認させて頂きたいのですが、 例えば元のテーブルに「hoge_id(index)」があり、 VIEWテーブルが「vtable」だとします。 SELECT * FROM vtable WHERE hoge_id = 値 または、 SELECT * FROM vtable LEFT JOIN atable ON vatble.hoge_id = atable.id (atable.idもindex) などとした場合、hoge_idのindexが有効で高速に結果が返ってくるということでよろしいのでしょうか。 最初から上記のように質問すればよかったですね。。すみません。 どうぞよろしくお願いします。

関連するQ&A

専門家に質問してみよう