系統須要作算分測試,在分數表四張分數表裏面分別插入了三百五十萬條數據進行測試,測試完畢後刪除測試數據,數據庫裏面只保留一組數據(每張表100條左右),可是這時候select表很是慢,和表中有百萬條數據的時候查詢速度差很少。sql
最後查找緣由是由於對應存放大數據量的表的表空間變大了,通常沒有特殊設定的狀況下表空間大小爲64KB,而這幾張表的表空間大小接近1G,因此儘管表裏面只有100條數據可是查詢的速度仍是很是地慢。這個時候能夠用如下代碼查看對應表所佔表空間的大小。數據庫
select sum(bytes)/(1024*1024) from user_segments where segment_name='表名';
既然表空間不須要這麼大,當數據量變小的時候就須要釋放多餘的表空間。測試
--釋放表空間 alter table 表名 move;
因爲釋放了表空間以後表的rowid會發生變化,基於rowid的索引會無效,這種狀況下通常會刪除並從新建立索引,也能夠直接rebuild索引。若是不知道這張表中有哪些索引,能夠查詢出這張表的全部索引並重建。或者也能夠查詢出當前用戶下全部表空間佔用狀況而後進行優化。大數據
--重建索引 alter index 索引名 rebuild; --查找對應表下全部索引 SELECT * FROM user_indexes WHERE TABLE_NAME = '表名' --查詢出Oracle當前用戶下全部表空間大小佔用狀況 select Segment_Name,Sum(bytes)/1024/1024 MEMORY_SIZE From User_Extents Group By Segment_Name ORDER BY MEMORY_SIZE DESC