2011-06-22 28 views
1

這是一個新的問題,我沒有遇到過。ORACLE表格加載速度

我有一個表,在一個點上包含超過10萬條記錄,這是一個開發環境的事件日誌。

加載表格需要10秒鐘的時間(只需單擊它即可查看錶格中的數據)。

我刪除了所有行,但仍需要7秒才能加載。

我用蟾蜍,它給了我一個對話框,上面寫着「語句的處理......」

任何想法?

以下是一些select語句以及他們耗時多久

select * from log; 21 rows in 10 secs 
select * from log where id = 120000; 1 row in 1 msec 
select * from log where user = 35000; 9 rows in 7 sec 

的id是PK,沒有對用戶現場沒有索引。

我有一個表視圖,其中包含所有坐在此表的頂部的字段,它的運行速度也很慢。

+0

你可以嘗試一個簡單的'select * from table'並查看需要多長時間? – Nivas

+0

你在*下有什麼理解我正確加載表格*? –

+0

用我試過的一些選擇和結果更新了我的問題。 – Patrick

回答

5

如果您發出「select * from event_log_table」,那麼您將使用全表掃描來掃描整個表格。它必須掃描所有分配的段,看看裏面是否有行。如果你的表一旦包含超過100K行,那麼它已經分配了至少足夠的空間來容納那些100K +行。請參閱:http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schema.htm#sthref2100

現在,如果刪除行,空間仍然分配給此表,並且Oracle仍然需要掃描所有空間。它像高水位一樣工作。

要減少高位標記,可以發出TRUNCATE TABLE命令,它可以重置高位標記。但是你會失去所有的行。

還有一個選項可以縮小表格中的空間。你可以閱讀有關它和它的前提條件在這裏: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_3001.htm#sthref5117

問候,
羅布。

+0

考慮到它是開發環境中的測試數據,通過簡單地截斷表沒有造成損害......此表似乎是收縮的候選者,但它給了我一個無效的表空間或段錯誤。雖然我沒有找到任何有關該錯誤的良好文檔。任何其他文件,你可能會有助於解決特定的錯誤將不勝感激。 – Patrick

+0

你能發佈確切的錯誤信息嗎? –

+0

ORA-10635:無效的段或表空間類型...啓用行移動 – Patrick

0

如果您從100M記錄表開始,我會更好地理解這一點。但爲了以防萬一,請嘗試運行Oracle統計信息。如果這不起作用,請刪除並重新創建該表上的索引。

+0

我正在查看統計數據......而且我不確定我在看什麼,但是有些數據不完整。有幾件事突出了..表中目前有21行...統計數據說NUM_ROWS | 12?這是什麼東西? – Patrick

+0

@帕特里克:可能沒什麼。統計信息反映了他們上次運行的行數的估計值。如果它仍然顯示100K,我會擔心。你在這張桌子上有沒有指數? – Olaf

+0

是的,我已經下降並重新添加他們無濟於事。 – Patrick