0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インデックスを作成したテーブルにインサートするとえらいコストがかかる問題

Last updated at Posted at 2019-02-13

あらすじ

1.業務にてなんか処理が重いところがあるとのことで調査

2.関係ありそうな記事の発見
Oracle INDEXを追加したときUPDATEとINSERTにどのくらい影響するのか

3.DBを調べた→インデックスバリバリ張られてる

4.対応策 考えたパクった
⇒参考1:
サイト名Oracle:ローカルインデックスで作成した主キーを無効化、有効化するとグローバルインデックスに変わってしまう

⇒参考2:
サイト名SQLServer

使用SQL

Index無効化.sql
Use [テーブル名]
ALTER INDEX [インデックス名] ON
[テーブル名] Disable
Index有効化.sql
Use [テーブル名]
ALTER INDEX [インデックス名] ON
[テーブル名] REBUILD

調査

業務でのねたなので写真は張れないのでメモ書き程度
処理:Insert文
結果:SQLの実行プランにて確認

区分 推定コスト Indexオブジェクト数 実行時間
インデックス有り 0.0700084 7 13:39:40
インデックス無し 0.0100024 1 14:09:59

※インデックスなしの残っているオブジェクトはPKです。さすがにこいつは無効化するの怖すぎる

結論

  • 実際に使うとしても

    • Indexの無効化⇒InsertないしUPdate⇒Indexの有効化となるためSQL処理を二つ追加せねばならない…。
  • 推定コストはよくなったが、実行時間が増えた…。

  • 大量データ時に力を発揮すると考えたい


以上、何かあればコメントお願いいたします。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?