Oracle 查詢使用者下表名,表列數,錶行數,表大小的SQL
阿新 • • 發佈:2022-12-02
最近想分析下資料庫的資訊, 然後寫了這個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 BY1 DESC ) y ON x.table_name = y.tablename ORDER BY y.表大小 desc
具體效果就不描述了.