• ベストアンサー

INDEXの無効化

entreeの回答

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

▼以下のSQLで無効化できます。 alter index ind_test invisible; alter index ind_test unusage; 有効化は以下です。 alter index ind_test rebuild; invisibleでオプティマイザから索引が見えなくなります。 unusageでDML発行時の索引の更新を抑止します。 有効化するときはテーブルと同期がとれていない状態なので 索引を再構築する必要があります。 ▼無効化している間のDMLで索引も更新されても問題ない場合はunusageのみでOKです。 alter index ind_test unusage; 有効化は以下です。 alter index ind_test usable; こちらの方が手軽ですが、大量データを入れる場合の性能改善はありません。 索引がない場合のオプティマイザの動作確認に使うくらいでしょうか。

uemitu
質問者

お礼

お礼が遅れてしまい申し訳ありません。 御回答ありがとうございました。 作成しようとしているプログラムは、大量データの登録前後に実行する想定のため教えていただいた下記コマンドを使用させていただきます。 > 無効化 > alter index ind_test invisible; > alter index ind_test unusage; > > 有効化 > alter index ind_test rebuild; ありがとうございました。

関連するQ&A

  • インデックスについて

    オラクルのインデックスについて教えてください。 ObjectBrowserというソフトでオラクルDBを管理しているのですが、 インデックスとCONSTRAINTというものの違いが良くわかりません。 現在ObjectBrowserで、インデックスを重複不可にすることで、そのテーブルの 主キーとしています。しかし、CONSTRAINTでPRIMARYKEYも設定できることに 最近気づきました。 ObjectBrowserに限らず、この違いについて教えてもらえないでしょうか? どのような時にインデックスを使い、CONSTRAINTのPRIMARYKEYはこのような時に 使用するという風にお教えていただければ幸いです。 何分、データベース初心者なもので... 宜しくお願い致します。

  • CASEでBETWEEN制約

    Oracle9i にて制約をつける際の質問です。 以下のようなテーブル構造の場合に、 NAME列にCASEで分岐してBETWEENでCHECK制約をつけようとしていますが、 エラーとなってしまいます。(ORA-00920: 関係演算子が無効です。) テーブル名:TEST2 ID NUMBER GEND NCHAR(1) NAME NVARCHAR2(100) 制約: ALTER TABLE TEST2 ADD CONSTRAINT NAME_CHK CHECK ( NAME CASE WHEN GEND = '1' THEN BETWEEN 'a' AND 'z' WHEN GEND = '2' THEN BETWEEN 'A' AND 'Z' ELSE BETWEEN '1' AND '9' END ) CASEで上記のような制約をつけることは可能でしょうか?

  • DB2でUNIQUE制約を削除したい

    DB2で以下のように明示的な名前のないUNIQUE制約を削除したいのですが、よい方法をご存じの方がおられましたらご教授ください。 (例) 1. 表の作成 CREATE TABLE TEST ( COL1 INT NOT NULL) 2. 明示的な名前を作成せずにUNIQUE制約を作成 ALTER TABLE TEST ADD UNIQUE (COL1); 上記のように名前指定しなかったUNIQUE制約を ALTER TABLE文で削除したいのですが、どのように すればよろしいのでしょうか? マニュアルの構文では制約名を指定する必要あるようで、 syscat.tabconstカタログで自動でつけられた制約名を調べた後、 以下のように指定したところ制約は削除されました。 (例) ALTER TABLE TEST DROP CONSTRAINT SQL090123084403480 しかしプログラムの修正が少なくなるよう、制約名を調べずにALTER TABLE 一文で削除できないものかと悩んでおります。 もしくはストアドプロシージャでも構いません。 よろしくお願いします。

  • 複数のインデックスについて

    以下のようなテーブルで、 ------------------------- テーブル名:hoge カラム1:name(名前) カラム2:age(年齢) カラム3:job(職業) INDEX age(age) ------------------------- 今現在、年齢で検索することが多いため、ageにIndexを張っているのですが、職業でも検索したいと思っています。 (今現在、職業で検索するとIndexが関係ないためか低速です。) この場合、「ALTER TABLE hoge ADD INDEX job(job)」で大丈夫でしょうか? インデックスが良くわかってないのですが、こうすると、今の年齢用のインデックスとは、全く別のインデックスが作成されると思って良いのでしょうか? (年齢のインデックスの下に職業のインデックスが作成され、職業で検索しても、結局、年齢のインデックスをまたぐため低速になる、なんてことは無いのでしょうか?) よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Oracle Databaseのインデックスを(意図的に)断片化させたい

    Oracle Database 10gのインデックスについて、 再構築(ALTER INDEX ___ REBUILD )コマンドの 検証を行うため、意図的にインデックスの断片化を 発生させたいと考えています。 (一般的にはDELETE、INSERT、UPDATEを繰返すうちに 断片化していくものです。) どなたか、インデックスを断片化させる スクリプトのサンプルなどをお持ちでないでしょうか? よろしくお願いいたします。

  • 続oracleのプライマリ・キー名の変更について

    oracleのテーブル名を変更します。 運用上ネーミングルールとしてプライマリ・キー名はpk_テーブル名としていますので、 プライマリ・キー名もこの時に変更したいのですが、適切な手順を教えてください。 旧テーブル名:table_a 旧プライマリ・キー名:pk_table_a  ↓ ↓ ↓ 新テーブル名:table_b 新プライマリ・キー名:pk_table_b という質問をさせて頂きました。 回答を頂き、一旦納得した気がしたのですが、どうもうまくいきません。 下記を実行すると4のところでコケます。 既にオブジェクトが存在するというものです。 どうやら 2のところのプライマリキー名変更がうまくいっていないか pk_table_aがどこかにゴミとして残っているように思えます。 オブジェクトブラウザというツールで見てみると、 CONSTRAINTにpk_table_bが INDEXのところにpk_table_aが見えています。 手順がおかしいのか? コマンドが間違えているのか? それともプライマリキー名の変更はしない方が良いのか? ここら辺を教えてください。 --1.TABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) / --2.プライマリキー名変更 ALTER TABLE table_a RENAME CONSTRAINT pk_table_a TO pk_table_b / --3.テーブル名変更 RENAME table_a TO table_b / --4.「1」と同じTABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) /

  • Oracleのindex作成のポイントに付いての質問。

    こんにちは。 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)を使うべき? ご経験者の方宜しくお願い致します。

  • Oracleシルバーの問題です。

    翔泳社オラクルマスター教科書Silverを使ってシルバー取得の勉強をしています。 その中でわからない点があったので教えてください。 1.CONSTRAINT EMP_FK1 FOREIGN KEY(MGR) REFERENCES EMP(EMPNO) 2.CONSTRAINT EMP_FK2 REFERENCES DEPT(DEPTNO) というふたつの制約文で、1.が正解で2が不正解となっているのですが、逆じゃないかな?と思うんです。 だって制約文の構文は 列名 データ型 ,[CONSTRAINT 制約名] 制約 ,[CONSTRAINT 制約名] 制約... とあります。 1.は","で区切ってないから間違いだと思うんですがどうでしょうか? どなたか解説していただけないでしょうか。 宜しくお願いいたします☆

  • CREATE TABLEのUSING INDEXについて

    題名通りなのですが、実際に CREATE TABLE テーブル名 (各種列作成, 制約) USING INDEX ~ USING INDEX以降に列と関係のないものをごちゃごちゃと置いていて 何をやっているかがいまいちよく分かりません。 色々とサイトなど調べたのですがいまいちよく分かりませんでした。 分かる方いらっしゃいましたら、教えていただけると幸いです。 どうかご教授よろしくお願い致します。

  • Accessで「引数が無効です。」

    助けてください。 Accessでいろんな処理をしていたら、Accessの上限用量(2G?)を超えてしまったみたいなんです。慌てて最適化をしたのですが、それをしても「引数が無効です」のメッセージが表示されなにもできなくなってしまいました。こんな時、どうしたらいいのでしょうか?リンクしてあるテーブルもたくさんあるし、クエリーも、フォームも・・・。やはり、新しいMDBファイルを作成してそこに全てをエクスポートするしかないのでしょうか? 是非、助けてください。 締切が迫っています!