あらすじ
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処理を二つ追加せねばならない…。
-
推定コストはよくなったが、実行時間が増えた…。
-
大量データ時に力を発揮すると考えたい
以上、何かあればコメントお願いいたします。