1. 程式人生 > 其它 >Oracle 查詢使用者下表名,表列數,錶行數,表大小的SQL

Oracle 查詢使用者下表名,表列數,錶行數,表大小的SQL

最近想分析下資料庫的資訊, 然後寫了這個SQL. 比較lowB一些. 

因為Oracle的 deferred_segment_creation 引數的影響.
很多表如果是0行,那麼是不會建立extents 儲存資訊.
所以很多取出來的表大小資訊為空. 

這也就導致了查詢結果表大小為空的情況. 
為了能夠準確顯示錶資訊, 我這邊進行了 left outer join的操作

SQL比較簡單未進行任何優化

有多個至少兩重的關聯子查詢用來展示結果. 

具體SQL為:

SELECT
    x.table_name AS 表名,
    x.錶行數,
    x.表列數,
    y.表大小 AS 表大小單位MB 
FROM
    (
    SELECT
        b.table_name,
        a.num_rows AS 錶行數,
        b.count1 AS 表列數 
    FROM
        user_tables a
        INNER JOIN ( SELECT table_name, count( column_name ) AS count1 FROM user_tab_columns GROUP BY table_name ) b ON a.table_name 
= b.table_name ORDER BY b.table_name ) x LEFT outer JOIN ( SELECT sum( tablesize ) AS 表大小, tablename FROM ( SELECT sum( C.bytes ) / 1024 / 1024 AS tablesize, C.table_name AS tablename FROM ( SELECT A.table_name, B.bytes FROM user_lobs A, user_extents B WHERE A.segment_name
= B.segment_name ) C GROUP BY C.table_name UNION ALL SELECT sum( bytes ) / 1024 / 1024 AS tablesize, segment_name AS tablename FROM user_extents WHERE segment_type = 'TABLE' GROUP BY segment_name ) GROUP BY tablename ORDER BY
1 DESC ) y ON x.table_name = y.tablename ORDER BY y.表大小 desc

具體效果就不描述了.