8种数据库获取表行数的方法

数据库,获取,行数,方法 · 浏览次数 : 98

小编点评

**Oracle数据库** ```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 sum( 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 ) GROUP BY tablename ) y ON x.table_name = y.tablename ORDER BY y.表大小 desc2. ``` **神通数据库** ```sql CREATE TABLE table_num ( table_name VARCHAR2(255), table_num NUMBER ); CREATE OR REPLACE PROCEDURE insert_table_num IS BEGIN FOR t IN (SELECT table_name FROM user_tables) LOOP EXECUTE IMMEDIATE 'INSERT INTO table_num (table_name, table_num) SELECT ''' || t.table_name || ''', COUNT(*) FROM ' || t.table_name; END LOOP; END;exec insert_table_num; SELECT * FROM table_num ORDER BY table_num DESC ``` ** 达梦数据库** ```sql SELECT T.TABLESPACE_NAME, T.OWNER, T.TABLE_NAME, TABLE_ROWCOUNT(T.OWNER, T.TABLE_NAME) AS TABLE_ROWCOUNT FROM DBA_TABLES T WHERE T.OWNER IN ('YourSchemas_name****') ORDER BY TABLE_ROWCOUNT DESC ``` ** MySQL 数据库** ```sql SELECT t.name AS TableName, SUM(p.rows) AS RowCounts FROM sys.tables t INNER JOIN sys.partitions p ON t.object_id = p.object_id WHERE t.is_ms_shipped = 0 AND p.index_id IN (0,1) GROUP BY t.name ORDER BY RowCounts DESC ``` ** PG 数据库** ```sql SELECT relname, reltuples FROM pg_class LEFT JOIN pg_namespace N ON ( N.oid = CLS.relnamespace ) WHERE nspname NOT IN ( 'pg_catalog', 'information_schema' ) AND relkind = 'r' ORDER BY reltuples DESC ``` ** SQL Server 数据库** ```sql SELECT t.name AS TableName, SUM(p.rows) AS RowCounts FROM sys.tables t INNER JOIN sys.partitions p ON t.object_id = p.object_id WHERE t.is_ms_shipped = 0 AND p.index_id IN (0,1) GROUP BY t.name ORDER BY RowCounts DESC ```

正文

1. Oracle数据库:

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

2. 神通数据库:

CREATE TABLE table_num (
  table_name VARCHAR2(255),
  table_num NUMBER
);

CREATE OR REPLACE PROCEDURE insert_table_num IS
BEGIN
  FOR t IN (SELECT table_name FROM user_tables) LOOP
  BEGIN
    EXECUTE IMMEDIATE 'INSERT INTO table_num (table_name, table_num)
                      SELECT ''' || t.table_name || ''', COUNT(*) FROM ' || t.table_name;
   EXCEPTION
       when others then 
       null ;
   END;
  END LOOP;
END;

exec insert_table_num;

SELECT * FROM table_num ORDER BY table_num DESC 

3. 达梦数据库

SELECT T.TABLESPACE_NAME,
       T.OWNER,
       T.TABLE_NAME,
       TABLE_ROWCOUNT(T.OWNER, T.TABLE_NAME)                            AS TABLE_ROWCOUNT
FROM DBA_TABLES T
WHERE T.OWNER IN ('YourSchemas_name****') order by TABLE_ROWCOUNT desc


4. MySQL数据库

SELECT
	table_name,
	table_rows 
FROM
	information_schema.TABLES 
WHERE
	table_schema = 'YourSchemas_name' 
ORDER BY
	table_rows DESC

5. PG数据库

SELECT
    relname,
    reltuples
FROM
    pg_class
    CLS LEFT JOIN pg_namespace N ON ( N.oid = CLS.relnamespace )
WHERE
    nspname NOT IN ( 'pg_catalog', 'information_schema' )
    AND relkind = 'r' 
ORDER BY
reltuples DESC;

6. SQLSERVER数据库

SELECT 
    t.name AS TableName,
    SUM(p.rows) AS RowCounts
FROM 
    sys.tables t
INNER JOIN 
    sys.partitions p ON t.object_id = p.object_id
WHERE 
    t.is_ms_shipped = 0
    AND p.index_id IN (0,1)
GROUP BY 
    t.name
ORDER BY 
    RowCounts DESC;

7. 人大金仓数据库-瀚高数据库 应该都可以使用PG的语法

SELECT
    relname,
    reltuples
FROM
    pg_class
    CLS LEFT JOIN pg_namespace N ON ( N.oid = CLS.relnamespace )
WHERE
    nspname NOT IN ( 'pg_catalog', 'information_schema' )
    AND relkind = 'r' 
ORDER BY
reltuples DESC;

与8种数据库获取表行数的方法相似的内容:

8种数据库获取表行数的方法

## 1. Oracle数据库: ``` SELECT x.table_name AS 表名, x.表行数, x.表列数, y.表大小 AS 表大小单位MB FROM ( SELECT b.table_name, a.num_rows AS 表行数, b.count1 AS 表列数 FROM use

StampedLock:JDK1.8中新增,比ReadWriteLock还快的锁

摘要:StampedLock是一种在读取共享变量的过程中,允许后面的一个线程获取写锁对共享变量进行写操作,使用乐观读避免数据不一致的问题,并且在读多写少的高并发环境下,比ReadWriteLock更快的一种锁。 本文分享自华为云社区《一文彻底理解并发编程中非常重要的票据锁——StampedLock》

[转帖]记录一则enq: TX - row lock contention的分析过程

https://www.cnblogs.com/jyzhao/p/8628184.html 故障描述:与客户沟通,初步确认故障范围大概是在上午的8:30-10:30之间,反应故障现象是Tomcat的连接数满导致应用无法连接,数据库alert中无明显报错,需要协助排查原因。 1.导入包含故障时刻的数据

[转帖]记录一则enq: TX - row lock contention的分析过程

https://www.cnblogs.com/jyzhao/p/8628184.html 故障描述:与客户沟通,初步确认故障范围大概是在上午的8:30-10:30之间,反应故障现象是Tomcat的连接数满导致应用无法连接,数据库alert中无明显报错,需要协助排查原因。 1.导入包含故障时刻的数据

[转帖]3.3.8. KWR运行期对比报告 KWR DIFF

https://help.kingbase.com.cn/v8/perfor/performance-optimization/performance-optimization-6.html#sys-ksh KWR报告是Diff报告的基础,在数据库运行过程中,通常在业务的高峰期和低谷期,或者在参数调

[转帖]Oracle、MySQL、PG是如何处理数据库“半页写”的问题的?

数据库“断页”是个很有意思的话题,目前任何数据库应该都绕不过去。我们知道数据库的块大小一般是8k、16k、32k,而操作系统块大小是4k,那么在数据库刷内存中的数据页到磁盘上的时候,就有可能中途遭遇类似操作系统异常断电而导致数据页部分写的情况,进而造成数据块损坏,数据块损坏对于某些数据库是致命的,可

[转帖]阿里规范 - 五、MySQL 数据库 - (一)建表规约 - 8 - 【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长 度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。

字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。 1、因为mysql 是行存储模式,所以会把整行读取出来。text 储存了大量的数据。读取时,占了大量的io。所以会十分的慢。 2、每行的数据过大 行溢出 InnoDB 会将一些大对象数据存放在数据页之外的 BLOB 页

[转帖]SQL Server数据库存储总结

SQL Server数据库存储文件类型:数据文件和日志文件。数据文件以页面作为存储单元存储数据。 页面:即数据页面,数据页(Page)。是系统在磁盘间中分配的一段大小为8k的连续空间。 文件头(File Header):每个文件的第0页记录叫文件头,记录引导信息。 扩展:每8个数据页(64k)的组合

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测

MySQL高级8-触发器

一、触发器 触发器是与表有关的数据库对象,指在insert/update/delete之前或者之后,触发并执行触发器中定义的sql语句集合,触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。 使用别名old和new来引用触发器中发生变化的记录内容,这与其他的数据库是相