Oracle表查詢慢的問題(高水位)解決方案

2021-06-27 16:50:42 字數 961 閱讀 8700

最近工作中碰到乙個問題,生產環境中某一張表查詢變的好慢,而本地同樣的映象環境查詢卻很快,研究了半天都沒有發現問題。 

開會進行討論,發現一條線索, 由於業務需求,這錶中的大部分資料全部被delete刪除了,只保留了2w.

因此,推斷此問題很有可能就是表的高水位問題。 下面我們就來驗證一下:

第一步,查詢當前表的blocks大小

執行蒐集統計

analyze table table_a compute statistics;

查詢blocks大小

select table_name,num_rows,blocks,empty_blocks 

from user_tables

where table_name='table_a';

查詢結果:table_a    421669     143320           40

第二步,查詢當前表實際使用的blocks大小

select count(distinct dbms_rowid.rowid_block_number(rowid)) used_blocks 

from table_a;

查詢結果:11369

情況已經很明顯了,實際使用的blocks遠遠小於當前表的blocks.  所以我們需要將表的空間釋放掉,

alter table table_a move;

alter index idx_id rebuild online;

注:對錶進行move以後,需要重建失效的索引

重新對錶進行查詢,查詢速度很快,問題解決。

進一步學習oracle高水位知識,可參考:

解決模糊查詢速度慢問題 ORACLE

乙個困擾我良久的問題,在今天早上8 41分時基本解決。資料庫的資料量非常龐大,查詢速度極慢,建立索引後 搜尋速度問題解決,但是在搜尋的sql語句中大部分是用like,可是like 是不使用索引的,而like 則經過索引,求教曾經的老師 高階程式設計師也無用,在 上搜尋 求助,最終鎖定兩種辦法 1.全...

Oracle表碎片查詢以及整理(高水位線)

oracle表碎片查詢以及整理 高水位線 sql alter table table name enable row movement 啟動行移動功能 sql alter table table name shrink space compact 只整理碎片 不 空間 重置高水位,此時不能有dml操...

oracle系統表的查詢

檢視當前使用者的預設表空間 sql select username,default tablespace from user users 檢視當前使用者的角色 sql select from user role privs 檢視當前使用者的系統許可權和表級許可權 sql select from us...