mysql表类型查询

普通表

bash 复制代码
SELECT 
    table_schema AS database_name,
    table_name
FROM 
    information_schema.tables
WHERE 
    table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND table_type = 'BASE TABLE'
    AND table_name NOT IN (
        SELECT DISTINCT table_name 
        FROM information_schema.partitions 
        WHERE partition_name IS NOT NULL
    )
ORDER BY 
    table_schema, table_name;

分区表

bash 复制代码
SELECT 
    p.table_schema AS database_name,
    p.table_name,
    GROUP_CONCAT(p.partition_name ORDER BY p.partition_ordinal_position) AS partitions,
    p.partition_method,
    p.partition_expression
FROM 
    information_schema.partitions p
WHERE 
    p.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND p.partition_name IS NOT NULL
GROUP BY 
    p.table_schema, p.table_name, p.partition_method, p.partition_expression
ORDER BY 
    p.table_schema, p.table_name;

区分表

bash 复制代码
SELECT 
    t.table_schema AS database_name,
    t.table_name,
    CASE 
        WHEN p.table_name IS NULL THEN '普通表'
        ELSE '分区表'
    END AS table_type,
    p.partition_method,
    p.partition_expression
FROM 
    information_schema.tables t
LEFT JOIN (
    SELECT DISTINCT 
        table_schema, 
        table_name,
        partition_method,
        partition_expression
    FROM 
        information_schema.partitions 
    WHERE 
        partition_name IS NOT NULL
) p ON t.table_schema = p.table_schema AND t.table_name = p.table_name
WHERE 
    t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND t.table_type = 'BASE TABLE'
ORDER BY 
    t.table_schema, t.table_name;
	

查出数据量

bash 复制代码
SELECT 
    t.table_schema AS '数据库名',
    t.table_name AS '表名',
    CASE 
        WHEN p.table_name IS NULL THEN '普通表'
        ELSE CONCAT('分区表(', p.partition_method, ')')
    END AS '表类型',
    t.table_rows AS '数据行数(估算)',
    CONCAT(ROUND(t.data_length / (1024 * 1024), 2), ' MB') AS '数据大小',
    CONCAT(ROUND(t.index_length / (1024 * 1024), 2), ' MB') AS '索引大小',
    CONCAT(ROUND((t.data_length + t.index_length) / (1024 * 1024), 2), ' MB') AS '总大小',
    p.partition_expression AS '分区键'
FROM 
    information_schema.tables t
LEFT JOIN (
    SELECT DISTINCT 
        table_schema, 
        table_name,
        partition_method,
        partition_expression
    FROM 
        information_schema.partitions 
    WHERE 
        partition_name IS NOT NULL
) p ON t.table_schema = p.table_schema AND t.table_name = p.table_name
WHERE 
    t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND t.table_type = 'BASE TABLE'
ORDER BY 
    t.table_schema, 
    CASE WHEN p.table_name IS NULL THEN 0 ELSE 1 END,  -- 普通表在前
    t.table_name;



SELECT 
    t.table_schema AS '数据库',
    t.table_name AS '表名',
    CASE 
        WHEN p.partition_method IS NULL THEN '普通表'
        ELSE CONCAT('分区表(', p.partition_method, ')')
    END AS '表类型',
    t.table_rows AS '估算行数',
    CONCAT(ROUND(t.data_length/1024/1024, 2), ' MB') AS '数据大小',
    p.partition_expression AS '分区键'
FROM 
    information_schema.tables t
LEFT JOIN (
    SELECT 
        table_schema, 
        table_name,
        partition_method,
        partition_expression
    FROM 
        information_schema.partitions
    WHERE 
        partition_name IS NOT NULL
    GROUP BY 
        table_schema, table_name, partition_method, partition_expression
) p ON t.table_schema = p.table_schema AND t.table_name = p.table_name
WHERE 
    t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND t.table_type = 'BASE TABLE'
ORDER BY 
    t.table_schema, t.table_name;

查出表行数

bash 复制代码
SELECT 
    t.table_schema AS '数据库',
    t.table_name AS '表名',
    CASE 
        WHEN p.partition_method IS NULL THEN '普通表'
        ELSE CONCAT('分区表(', p.partition_method, ')')
    END AS '表类型',
    t.table_rows AS '估算行数',
    p.partition_expression AS '分区键'
FROM 
    information_schema.tables t
LEFT JOIN (
    SELECT DISTINCT 
        table_schema, 
        table_name,
        partition_method,
        partition_expression
    FROM 
        information_schema.partitions
    WHERE 
        partition_name IS NOT NULL
) p ON t.table_schema = p.table_schema AND t.table_name = p.table_name
WHERE 
    t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND t.table_type = 'BASE TABLE'
ORDER BY 
    t.table_schema, t.table_name;
相关推荐
翔云12345614 分钟前
RocksDB中,客户端每写入一次数据,需要访问几次磁盘
运维·数据库·mysql
DevOpenClub24 分钟前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
zhaoshuzhaoshu2 小时前
Android 系统启动与调试中的日志抓取方式全解析
android
GeW2 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux·数据库
雨声不在3 小时前
android 动画掉帧
android
在多学一点3 小时前
MYSQL第二次作业
android·数据库·mysql
yeccheng4 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
Risehuxyc4 小时前
Microsoft.Data.Sqlite体验
数据库·sqlite
骑着蜗牛撵大象3274 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
我叫张土豆4 小时前
Android 14+ 模拟器抓包实录:把 Burp CA 装成系统 CA,让 targetSdk≥34 的 App 乖乖解密
android