如何查看表的统计信息?

如何查看表的统计信息?
 
在不同的数据库系统中,查看表统计信息的方法有所不同,下面分别介绍在 Oracle、MySQL 和 PostgreSQL 中查看表统计信息的方式。

Oracle

在 Oracle 里,可以通过数据字典视图和 DBMS_STATS 包来查看表的统计信息。

1. 使用数据字典视图 ALL_TAB_STATISTICS

这个视图包含了当前用户可以访问的表的统计信息。
 
SELECT 
    table_name, 
    num_rows, 
    blocks, 
    avg_row_len, 
    last_analyzed
FROM 
    ALL_TAB_STATISTICS
WHERE 
    table_name = 'YOUR_TABLE_NAME';

  • table_name:表的名称。
  • num_rows:表中的行数。
  • blocks:表占用的数据块数量。
  • avg_row_len:表中每行的平均长度。
  • last_analyzed:上次收集统计信息的时间。

2. 使用 DBMS_STATS 包的 GET_TABLE_STATS 过程

DECLARE
    p_numrows NUMBER;
    p_blocks NUMBER;
    p_avgspace NUMBER;
    p_lastanalyzed DATE;
BEGIN
    DBMS_STATS.GET_TABLE_STATS(
        ownname => 'YOUR_SCHEMA_NAME',
        tabname => 'YOUR_TABLE_NAME',
        numrows => p_numrows,
        numblks => p_blocks,
        avgspace => p_avgspace,
        lastanalyzed => p_lastanalyzed
    );
    DBMS_OUTPUT.PUT_LINE('Number of rows: ' || p_numrows);
    DBMS_OUTPUT.PUT_LINE('Number of blocks: ' || p_blocks);
    DBMS_OUTPUT.PUT_LINE('Average space per block: ' || p_avgspace);
    DBMS_OUTPUT.PUT_LINE('Last analyzed: ' || TO_CHAR(p_lastanalyzed, 'YYYY-MM-DD HH24:MI:SS'));
END;

在运行此代码前,要确保开启了 DBMS_OUTPUT 输出:
SET SERVEROUTPUT ON;

MySQL

在 MySQL 中,可以通过 SHOW TABLE STATUS 语句和 INFORMATION_SCHEMA 数据库来查看表的统计信息。

1. 使用 SHOW TABLE STATUS 语句

 
SHOW TABLE STATUS LIKE 'YOUR_TABLE_NAME';

该语句会返回表的各种信息,其中包含了一些统计信息,例如:

  • Rows:表中的大致行数。
  • Data_length:表的数据占用的字节数。
  • Index_length:表的索引占用的字节数。
  • Auto_increment:下一个自动递增的值(如果有自增列)。

2. 使用 INFORMATION_SCHEMA.TABLES 表

 
SELECT 
    TABLE_NAME, 
    TABLE_ROWS, 
    DATA_LENGTH, 
    INDEX_LENGTH, 
    AUTO_INCREMENT, 
    UPDATE_TIME
FROM 
    INFORMATION_SCHEMA.TABLES
WHERE 
    TABLE_SCHEMA = 'YOUR_DATABASE_NAME' 
    AND TABLE_NAME = 'YOUR_TABLE_NAME';

PostgreSQL

在 PostgreSQL 中,可以通过系统视图来查看表的统计信息。

1. 使用 pg_stat_all_tables 视图

SELECT 
    relname, 
    seq_scan, 
    seq_tup_read, 
    idx_scan, 
    idx_tup_fetch, 
    n_tup_ins, 
    n_tup_upd, 
    n_tup_del
FROM 
    pg_stat_all_tables
WHERE 
    relname = 'YOUR_TABLE_NAME';

  • relname:表的名称。
  • seq_scan:表的顺序扫描次数。
  • seq_tup_read:顺序扫描读取的元组(行)数量。
  • idx_scan:表的索引扫描次数。
  • idx_tup_fetch:通过索引扫描获取的元组数量。
  • n_tup_ins:插入的元组数量。
  • n_tup_upd:更新的元组数量。
  • n_tup_del:删除的元组数量。

2. 使用 pg_class 和 pg_statistic 视图

SELECT 
    relname, 
    reltuples, 
    relpages
FROM 
    pg_class
WHERE 
    relname = 'YOUR_TABLE_NAME';
  • reltuples:表中的大致行数。
  • relpages:表占用的页面数量。

posted on 2025-04-01 10:18  数据库那些事儿  阅读(207)  评论(0)    收藏  举报