インデックスを作成したテーブルにインサートするとえらいコストがかかる問題
あらすじ
1.業務にてなんか処理が重いところがあるとのことで調査
2.関係ありそうな記事の発見
⇒ Oracle INDEXを追加したときUPDATEとINSERTにどのくらい影響するのか
3.DBを調べた→インデックスバリバリ張られてる
4.対応策 考えたパクった
⇒参考1:
サイト名Oracle:ローカルインデックスで作成した主キーを無効化、有効化するとグローバルインデックスに変わってしまう
⇒参考2:
サイト名SQLServer
使用SQL
Use [テーブル名]
ALTER INDEX [インデックス名] ON
[テーブル名] Disable
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処理を二つ追加せねばならない…。
推定コストはよくなったが、実行時間が増えた…。
大量データ時に力を発揮すると考えたい
以上、何かあればコメントお願いいたします。
Author And Source
この問題について(インデックスを作成したテーブルにインサートするとえらいコストがかかる問題), 我々は、より多くの情報をここで見つけました https://qiita.com/sutoronnjiumu/items/b6d3a9539e29f25c099c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .