- ベストアンサー
データベースの索引
oracle masterの問題関連で質問があります。 一般的にデータベースで CREATE INDEX myind ON mytbl(a,b,c) と索引を作成した場合に SELECT a FROM mytbl ORDER BY a; この場合myindの索引は使用されるのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 >ご指摘の通りorder byでは索引されないのですね。 私はそんなことはいっていませんよ。 参考URLはご覧になりましたか? こちらの「Order By句の使用」のところにも同様のことが書かれています。 http://www.int21.co.jp/pcdn/oracle/article/optimizer.html 「Order By句では、表にNot Null指定されてる場合に限り索引が使用されます」 ということではないですか? 今、手許にOracleがないのでテストしていませんので自信ありとはしませんが。
その他の回答 (5)
- kakusuke
- ベストアンサー率36% (95/259)
プライマリーキーだと 勝手に並べ替えちゃいますが。 order by を使ったとき、 インデックスキーは 使用してます。 現に実行速度を測ったら、 違いましたもん。 インデックスキーの使用とは 先に並べ替えておいた インデックスのテーブルを 参照する ということです。 あくまでも。
お礼
ご回答有難うございます。 ANALYZE INDEX ~ VALIDATE STRUCTURE文で 調べられるそうなので 週末にでも確認したいと思います。
- msystem
- ベストアンサー率42% (79/186)
索引は基本的に検索条件がある時に使用されませすが、オプティマイザのモードによっては、この場合でも索引は使われるかもしれません。必要なカラム名がaで並び替えもaカラムなので索引のアクセスだけで検索ができるため、そうなるかもしれません。でも、一般には、ほかの方が言っているように使用しないと思います。 ちなみに索引を2つ作った場合ですが、どちらが使われるかは、オプティマイザのモードによりますが、多分、myindiiの方が使われるはずですが、保証されません。
お礼
ご回答有難うございます。 オプティマイザですか。勉強になります。
- MovingWalk
- ベストアンサー率43% (2233/5098)
WHERE句はありませんが、ORDER句に索引aが指定されているので索引が使用されるのが 普通ではないかと思います。 こちらの下の方の「■ ソートの使用」のところをご覧下さい。 http://www.hi-ho.ne.jp/tsumiki/doc_1.html
お礼
皆様ご回答有難うございました。 ご指摘の通りorder byでは索引されないのですね。 索引そのものの自体理解不足でした。 CREATE INDEX myindi ON mytbl(a,b,c) CREATE INDEX myindii ON mytbl(a,b) と索引を作成した場合に SELECT a FROM mytbl WHERE a = 'a' ORDER BY a; 例えばこういう場合だと、使用する索引の優先順位とかあるのでしょうか?
- taknt
- ベストアンサー率19% (1556/7783)
多分、使用されないと思います。 インデックスというのは、検索するために使用されるものだからだと思います。 ま、インデックスをはったものと、はってないものと 作って 検索速度を比較してみるしかないですけどね。
お礼
ご回答ありがとうございます。
試してませんが、WHERE句がないから、インデックスは使用されないのでは? 使用しても意味がないし。
お礼
ご回答ありがとうございます。
お礼
ご回答有難うございます。 oracleだと ANALYZE INDEX ~ VALIDATE STRUCTURE文で 調べられるみたいですね。 私も手元にはないので暇な時試用版ででもためしたいと思います。