查詢出資料庫中預設會以全表掃描方式訪問的表

chensq發表於2005-07-29
這個查詢可以根據初始化引數設定和軟體版本,查詢出預設情況下會以全表掃描方式訪問的表。[@more@]


/*Auth:chensq#itpub.net
Date:2005-07-29 17:43
*/

select segment_name,bytes from dba_segments a,dba_tables b
where bytescase when (select 0 from dual where not exists (select value from v$parameter where name like '%small_table_%'))=0 then
--parameter _small_table_threshold is not seted
(select case when (select SUBSTR(BANNER,6,1) from v$version where banner like 'CORE%')<9 then --lower than 9i
(select value*.02 from v$parameter where name='db_cache_size')
else (bytes/a.blocks)*20--above 9i
end from dual)
else
(select to_number(value) from v$parameter where name like '%small_table_%')
end
)--_small_table_threshold
and a.segment_name=b.table_name


這個查詢可以根據初始化引數設定和軟體版本,查詢出預設情況下會以全表掃描方式訪問的表。

理論依據可以參見網上的一些文章(搜尋_small_table_threshold)或者《Oracle 9i效能調整》第496~497頁。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21072/viewspace-815377/,如需轉載,請註明出處,否則將追究法律責任。

相關文章