2010-12-10 6 views
10

15個のフィールドを持つOracleデータベースにテーブルがあります。 この表には3500000個の挿入がありました。私はそれらをすべて削除しました。その後空のテーブルでクエリが遅く実行されます。 (大量の挿入を削除した後)

delete 
from table 

私はselect文
を実行するたびに、私はテーブルが空であっても非常に遅い応答(7秒)を取得します。 インデックスフィールドに基づいて を検索する場合にのみ、通常の応答が得られます。

なぜですか?

答えて

7

を、あなたが削除を理解するのに役立ち切り捨て、および高透かし必要がありますウォーターマークなど

今すぐtruncateテーブルに入れたくない場合は(新鮮なデータが挿入されているため)alter table xyz shrink spaceを文書化here 10g

-3

sqlでは、テーブルを完全に消去したい場合は、削除の代わりにtruncateを使用する必要があります。 350万行のテーブルがあり、各行ごとに増分するbigintの列にインデックス(一意の識別子)があるとします。テーブルを切り捨てると、テーブルが完全にクリアされ、インデックスが0にリセットされます。削除によってインデックスがクリアされることはなく、次のレコードが挿入されると3,500,001で続行されます。切り詰めも、削除よりはるかに高速です。違いを理解するために、以下の記事を読んでください。

Read this articleこの記事では、切り詰めと削除の違いについて説明しています。それぞれを使用する時間があります。 HereはOracleの観点から見た別の記事です。

+2

-1質問をしないときにインデックスに言及し、Oracleの質問で「bigint」と言い、何らかの形で回答が受け入れられました –

+0

3つの答えがすべて私を満たしています。私はこの答えを受け入れました。なぜなら、私が尋ねたことをより明確に理解することができ、それをもっと詳しく見るために2つの記事のリンクを私にくれました。私はそれらのすべてをチェックし、他のものよりも完全な答えを見つけました。 –

関連する問題