mysql数据库查询单表行长度

SELECT 
    t.TABLE_NAME,
-- 		t.table_type,
    SUM(
        CASE 
            WHEN c.DATA_TYPE = 'tinyint' THEN 1
            WHEN c.DATA_TYPE = 'smallint' THEN 2
            WHEN c.DATA_TYPE = 'mediumint' THEN 3
            WHEN c.DATA_TYPE = 'int' THEN 4
            WHEN c.DATA_TYPE = 'bigint' THEN 8
            WHEN c.DATA_TYPE = 'float' THEN 4
            WHEN c.DATA_TYPE = 'double' THEN 8
            WHEN c.DATA_TYPE = 'decimal' THEN c.NUMERIC_PRECISION + c.NUMERIC_SCALE
            WHEN c.DATA_TYPE IN ('char', 'varchar', 'binary', 'varbinary') THEN 
                c.CHARACTER_MAXIMUM_LENGTH * 4 -- utf8mb4编码每个字符最多4字节
                + IF(c.CHARACTER_MAXIMUM_LENGTH <= 255, 1, 2) -- var_length_column_extra_bytes
            WHEN c.DATA_TYPE IN ('date', 'time') THEN 3
            WHEN c.DATA_TYPE IN ('datetime', 'timestamp') THEN 5 + IFNULL(c.DATETIME_PRECISION, 0)
            WHEN c.DATA_TYPE = 'year' THEN 1
            ELSE 0
        END
    ) AS Estimated_Max_Row_Size
FROM 
    information_schema.TABLES t
JOIN 
    information_schema.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
WHERE 
    t.TABLE_SCHEMA = 'your_table_schema_name' 
		AND t.table_type = 'BASE TABLE'
GROUP BY 
    t.TABLE_NAME
		ORDER BY Estimated_Max_Row_Size DESC

  

posted @ 2024-04-16 15:21  Amireux-126  阅读(45)  评论(0编辑  收藏  举报