
こんにちは
Oracleサーバ負荷試験のため、下記2つの試験をやりました。
1、Commitなしで500万件のレコードをDBにINSERTしました。
2、Commitありで400万件のレコードをDBにINSERTしました。
その後、Delete from TABLEで中身を削除しましたが、
そのテーブルのSELECTがすごく重くなっているのは変わりませんでした。
心当たりがある方、解決法を教えていただけませんか?
ちなみに、関係あるかどうか分かりませんが、そのテーブルの初期化サイズが7100KBぐらいなっています。ほかのテーブルは64KBぐらいですが、もしそれが原因だったら、最適化する方法ありますでしょうか?
(できれば、テーブルの削除・再作成を避けたいです。)
No.1ベストアンサー
- 回答日時:
こんにちわ。
> テーブルのSELECTがすごく重く・・・
Oracle は最終レコードと言う管理を行っていないため、
全件検索時は過去にデータが格納されていた所 (High Water Mark)
まで検索が行われます。
データ削除前に900万件のレコードが入っていたため、たとえ全レコード
を削除しても、900万件分の無効ブロックが読み込まれます。
> 心当たりがある方、解決法を教えていただけませんか?
Delete ではなく、Truncate 文を使うと空きブロックの解放も
行われるので、性能が改善する筈です。
但し、Delete 文と違って条件を指定しての削除はできませんので
注意して下さい。
どうしてもDelete で削除した後に空きブロックの解放を行う
必要があるのであれば、「Alter table 表名 move」で
解放可能です。
但し、Alter table を行うと、該当表に定義されている索引が
無効になりますので、その後
「Alter index 索引名 rebuild」で索引も再作成して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
単一グループのグループ関数で...
-
データ
-
updateで複数行更新したい
-
PL/SQLでフェッチでNULLの項目...
-
osqleditについて
-
SQL*Loader Append
-
where句中のtrim関数について
-
デフォルトでデータが表示され...
-
group byの並び順を変えるだけ...
-
アクセスのレポートでレコード...
-
値が入っていない日付型の項目...
-
テーブルの最後(最新)のレコー...
-
SQLローダーCSV取込で、囲み文...
-
count関数の値をwhere句で使用...
-
BLOBやCLOBのパフォーマンスを...
-
select文の実行結果に空白行を...
-
1の行を固定した上でVBAを用い...
-
Oracleで「文字が無効です」の...
-
2つの列が同じ値の行を取得するSQL
-
SQLデータベースの処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
SELECT FOR UPDATE で該当レコ...
-
【PL/SQL】FROM区に変数を使う方法
-
where句中のtrim関数について
-
データ
-
SQL*Loader Append
-
AccessのSQL文で1件のみヒット...
-
引数によってwhere句を切り替え...
-
トランザクションログを出力せ...
-
updateで複数行更新したい
-
アクセスのレポートでレコード...
-
group byの並び順を変えるだけ...
-
「数字で始まらない」ものを抽...
-
osqleditについて
-
SQLで条件にヒットしたレコード...
-
デフォルトでデータが表示され...
-
BLOB型項目をSQLの検索条件に指...
-
1レコード全てを改行なしで表...
-
トリガからプロシージャのコー...
-
PL/SQLでフェッチでNULLの項目...
おすすめ情報