查出数据库中数据量较小的表

时间:2021-09-09 12:20:34

 答一、
最简单的办法可能是先分析数据库  
可以用全库分析,看你的数据库到底大不大,如果太大,全库分析就不是好办法。  
分析完后查询   dba_tables/user_tables即可

1.Analyze all tables
2.select sum(num_rows)  from dba_tables

select table_name,num_rows from user_tables;
但不是最新的
在某些特定条件下才是最新的
使用stat的包来更新
或者
ANALYZE TABLE 表名 COMPUTE STATISTICS;


num_rows就是行数啊!

答二、
执行下面的角本,生成c:/mytext.sql的文件,运行c:/mytext.sql文件中的内容,可以得到当前用户下的所有表及表中的记录数
Connect UserID/PSW@NETServerName
set feedback off
set heading off
spool c:/mytext.sql
select decode(rownum,1,'','union')||' select'||''''||table_name||''''||',count(*)from '||table_name from user_tables;
spool off

答三、
如果你的用户没有dba权限, 使用以下语句:
  EXECUTE   DBMS_UTILITY.ANALYZE_DATABASE('COMPUTE');  
  SELECT   OWNER,   TABLE_NAME,   NUM_ROWS   FROM   ALL_TABLES; 
如果你的用户没有dba权限,   并且只想查看本用户的所有表的记录数(注意:   不是你说的"库中的所有表"),   改为:  
   
  EXECUTE   DBMS_UTILITY.ANALYZE_SCHEMA('MYUSERNAME',   'COMPUTE');  
  SELECT   OWNER,   TABLE_NAME,   NUM_ROWS   FROM   USER_TABLES;  
   
  注意:   MYUSERNAME是你的用户名,   用大写.  
   
  之所以不把它做成一个函数,   是因为在数据量大时,   ANALYZE是个很耗时的工作.   如果不是必须要求精确数字,   第二次及以后的统计可以使用前面的ANALYZE结果.  
   
   
  另一种方法:  
   
  SET   ECHO   OFF  
  SET   HEAD   OFF  
  SET   LINESIZE   200  
  SET   PAGESIZE   0  
  select   'SELECT   '''   ||   TNAME   ||   '''   TABNAME,   COUNT(1)   FROM   '   ||   TNAME   ||   ';'   FROM   TAB;  
  SPOOL   C:/COUNTALL.SQL  
  /  
  SPOOL   OFF  
   
  然后执行生成的COUNTALL.SQL  

 

总:
下面的语句可以查出数据库中数据量较小的表:
SELECT * FROM (SELECT T.TABLE_NAME,SUM(NUM_ROWS) AS MYCOUNT  FROM USER_TABLES T GROUP BY T.TABLE_NAME)  WHERE MYCOUNT<100