こんにちは。
Oracleのindex作成のポイントに付いて質問させて頂きます。
テーブルAに対して、インデックスAと言う名称のINDEXを作成するとします。
テーブルAの項目はP1,A1,A2,A3,A4と言う5ケの項目より成り立ちます。
(P1はテーブル作成時のプライマリーキーです。)
今、プログラム1・プログラム2・プログラム3からテーブルAのデータを利用していますが、速度が遅くそのためインデックスAを作成して改善するところです。
プログラム1では、A1,A2,A3をキーとしてデータを読み込んでいます。プログラム2ではA1とA4、プログラム3ではA1をキーとして読みこんでいます。
優先順位は、プログラム1が第1優先、プログラム2が第2優先、プログラム3が第3優先です。
システムに負荷を掛けたくないと言う理由からインデックスは1ケのみ作成するとします。
キー項目としては、どれを選定するべきでしょうか?
1)A1
2)A1,A2,A3
3)A1,A2,A3,A4
1)は汎用性があるように思えますが?
2)でプログラム1を優先させて、同時にプログラム2・3にもこのINDEXは適用されるのでしょうか?
それとも、全てを網羅した3)を使うべき?
ご経験者の方宜しくお願い致します。
No.2
- 回答日時:
とりあえず3つとも作ってみては?
1を作る→各プログラムから実行されるSQLを擬似的に実行し、実行計画をとる→1を削除する→2を作る→(以下略)
でも、3のインデックスでも、プログラム2はインデックスを使いません。A1, A2, A3, A4の順で列を指定してインデックスを作ると、"A1", "A1&A2", "A1&A2&A3", "A1&A2&A3&A4"の条件を指定したとき、インデックスを使用します。
ということは、2で作ると、プログラム1とプログラム3はインデックスを使ってくれるわけですね。
なお、NULLを検索しようとすると、インデックスは使えません。
早速の回答有難う御座います。
おっしゃる通り只今全てのパターンを試しています。
インデックスを張るとそれぞれ早くなるような感じがしてどうも感覚的にしっくり来てない状態ですが・・・。
No.3
- 回答日時:
A1,A2,A3
A1,A4
の2つを張れば、3つの処理すべてまかなえます。
あとは、どの処理を優先させるかでしょう。
ちなみに、
A1,A2,A3,A4
は、どの処理でも使用されません。
早速のご回答有難う御座います。
select * from テーブルA WHERE A1=定数 AND A2=定数 AND ・・・・
と言ったSQL文でインデックス変えながらテストしてます。
1)でも早くなるような感じで、どうもしっくり来てないですが、色々とやっています・・・。
No.5ベストアンサー
- 回答日時:
>インデックスを張るとそれぞれ早くなるような感じがしてどうも感覚的にしっくり来てない状態ですが・・・。
だから、実行計画を取得してください。SQL*PLUSで、SET AUTOTRACE ON。または、サンプルの件数が十分(最低でも千件)にあるなら、SET TIMING ONで、実行にかかった時間が表示されます。どちらもSQL*PLUSで使えます。
インデックスの使用方法については、Oracle9iR2のマニュアルを見ているので、他のバージョンでは違う可能性があります。
この回答への補足
見えました。
実行計画で
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 INDEX (RANGE SCAN) OF 'インデックスA'
と
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'テーブルA'
2 1 INDEX (RANGE SCAN) OF 'インデックスA'
の違いでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Windows 10 Windowsのタイムスケジューラーについての質問です。 先日、Webスクレイピング用のプログラムを 1 2022/09/28 05:51
- C言語・C++・C# 1. 仮想CPU「exmini」を使用して,「$dataからn減算する」プログラムを作成してください 2 2022/07/04 17:49
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- システム CPUの問題について 2 2022/07/09 12:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysql IN句に1データだけ指定...
-
[ BETWEEN ] vs [ >= AND <= ]
-
ホームぺージを作ったのですがg...
-
コクヨ タイトルブレーンでイ...
-
【SQLServer】IS NULLのパフォ...
-
複数のDBでjoinする場合のindex...
-
テキスト項目255ケタのメリット...
-
主キーにインデックスは貼らな...
-
ビューにインデックスを設定で...
-
主キーとインデックスの違いに...
-
インデックスがすぐに壊れます…
-
エクセル
-
「マスタ」と「テーブル」の違...
-
ACCESS2007 フォーム 「バリア...
-
2つのテーブルから条件に一致...
-
ビューで引数を使いたい
-
PhpMyAdminで作成して実行せよ...
-
ACCESS 一番最新の日付の金額...
-
アクセスのテーブルからエクス...
-
Accessのリンクテーブルについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[ BETWEEN ] vs [ >= AND <= ]
-
主キーにインデックスは貼らな...
-
【SQLServer】IS NULLのパフォ...
-
インデックスの再構築の意味っ...
-
mysql IN句に1データだけ指定...
-
ビューにインデックスを設定で...
-
年と月が別カラムの場合のSQL
-
サーバ負荷を抑える大量データ...
-
outlook2007 検索できないんです
-
コクヨ タイトルブレーンでイ...
-
ホームページがGOOGLEにインデ...
-
画像の赤丸で囲っている、角丸...
-
MS-DOS時代のデーターベ...
-
Google検索はなぜ早い?
-
複数のDBでjoinする場合のindex...
-
テキスト項目255ケタのメリット...
-
数学でunprimedとは何を意味し...
-
『ラミネートインデックスシー...
-
SQLiteで... like を早くする
-
SQL関数とレスポンスについて
おすすめ情報