Oracle9i windows2000です。
以下のようなテーブルがあります。
table_a
-----------------------
id NUMBER(10,0) NOT NULL,
sort NUMBER(10,0) NOT NULL,
name VARCHAR(10),
text VARCHAR(255)
この条件で、以下のふたつのSELECT文を発行した時、パフォーマンスが良いのはどちらですか?
Oracleでは後ろから検索されると聞いたことがあるのですが本当でしょうか?
※idにプライマリキー、
id,sortにインデックスが貼ってあります。
(1)SELECT text FROM table_a
WHERE id = 1
AND sort = 2
AND name = 'a'
(2)SELECT text FROM table_a
WHERE name = 'a'
AND sort = 2
AND id = 1
No.5ベストアンサー
- 回答日時:
こんにちわ。
#3 のmuyoshid です。
> 「オプティマイザを使用しているのであれば」
> ということは、必ずオプティマイザが使われるわけでは
> ないのでしょうか。
Oracle9i の場合、コストベース・オプティマイザと
ルールベース・オプティマイザの2種類のオプティマイザ
が実装されています。
簡単に説明すると、
ルールベース・オプティマイザ:
検索に使用する索引の優先順位や、結合方法に優先順位
が決められていて、優先順位の高いものから選択される
ようになっています。
コストベース・オプティマイザ:
テーブルをAnalyze して収集した統計情報に基いて
アクセスパスが決定されます。
Materialized View やFunction 索引等、
コストベース・オプティマイザの使用が前提となっている
機能もいくつかあります。
ユーザ登録 (無料) が必要ですが、OTN Japan でPDF 形式の
マニュアルを公開していますので、詳細はこちらで確認
されてみてはいかがでしょうか?
「Oracle9i パフォーマンスチューニング・ガイドおよびリファレンス」
に詳しく記載されています。
参考URL:http://otn.oracle.co.jp/
No.4
- 回答日時:
場合によっては、
where my_slow_funxion(name) = 1 and name = 'a'
の方が
where name = 'a' and my_slow_funxion(name) = 1
よりも
速かったような気がします(逆?)。
もし、試してみていただけるのなら、結果を教えていただけると嬉しいです。
No.3
- 回答日時:
こんにちわ。
ルールベース・オプティマイザを使用しているのであれば通常の索引を使用した検索
よりも主キーによる検索の方が優先度が高いので、主キーが使われます。
と言う事で、どちらのSQL 文でもパフォーマンスは同じはずです。
ご回答有難うございます。
「オプティマイザを使用しているのであれば」
ということは、必ずオプティマイザが使われるわけではないのでしょうか。
索引よりも主キーの優先度が高いのですね。
#2の方と逆の説になってしまい、ますます悩んでしまいます・・。
主キー優先となった場合に、where句での書き順はどちらでも同じ、というのはどうしてなんでしょう?
先に書いたほうが早い、とか後に書いたほうが早い、とかいう概念自体が間違っているのでしょうか。
もしよろしければひきつづきご回答いただけないでしょうか。
No.2
- 回答日時:
select
/*+ index(table_a インデックス名) */
text
from table_a
where id = 1
and sort = 2
and name = 'a'
とすれば
Where句をどう変えようと
指定されたインデックスを
一番最初に見るので
パフォーマンスが一番いいです。
ご回答有難うございます。
インデックスを貼ってある場合はインデックス優先なんですね。
ではインデックスを貼ってなかった場合
(idのみ)はどうなるのでしょうか。
もしよろしかったら引き続きご回答いただけないでしょうか。
No.1
- 回答日時:
Oracleはオプティマイザが働いて、最適な実行順序に組み替えてしまうので、実際にどのような順序で実行されているかは解りません。
EXPLAIN PLANで実際の実行順序を調べてみたらどうでしょうか?
参考URL:http://oracledba.at.infoseek.co.jp/dba/contents/ …
ご回答有難うございます。
実際の順序で実行されるかはわからないのですね。
EXPLAIN PLANというのも明日さっそくやってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
likeとsubstrの使いわけについて
-
JOINの時のONとWHEREの違いにつ...
-
実行計画HASH JOIN RIGHT OUTER
-
Access VBAで行ラベルが定義さ...
-
Accessのマクロでモジュールを...
-
エクセルVBAでUserFormを起動し...
-
全角空白のTRIMができない...
-
会社の〇〇部と〇〇課の違いっ...
-
VBA プロシージャの名前の取得
-
SQL*Plusの終了はquit?exit?
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
sqlplusのspoolで空白行出現
-
Transact-SQLでストアードプロ...
-
Excelグラフの日付軸の日付がず...
-
Statement ignored というエラー
-
重複するIDのデータを1行にま...
-
Oracle : BLOB型フィールドへの...
-
SQLで部分的にGROUP BYしたいとき
-
SQL*Loader フォーマット変換...
-
Oracle 10g 他スキーマの参照権...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
likeとsubstrの使いわけについて
-
WHERE句の実行順序
-
Like文の速度について教えてく...
-
WHERE句はJOIN結合前結合後どち...
-
ヒント句が無効になります
-
JOINの時のONとWHEREの違いにつ...
-
問題解決のストーリーにて PDCA...
-
実行計画HASH JOIN RIGHT OUTER
-
SQL ORDER BYにおける条件について
-
あいまい検索のパフォーマンス...
-
アナライズでほとんどの処理が...
-
Oracleのチューニングについて
-
【チューニング】インデックス...
-
Oracleで検索すると、フリーズ...
-
Oracleでデータ取得処理を高速...
-
INDEX作成による更新系の影響範囲
-
必ずしも計画は綿密な方が良い...
-
Analyzeとは?
-
OEMで負荷の少ないSQLの実行計...
おすすめ情報