统计数据库中所有表的一条数据使用内存大小

  • 一是表字段所能存储的字节数之和

#计算表数据的最大值,表中各字段能存储的字节数之和
#问题:一.字段长度给的不对(特别是通用字段) 二.很多字段存值为空
SELECT SUM(legth/1024) countlegth FROM (
    SELECT a.TABLE_NAME,SUM(a.LENGTH) legth FROM (
        SELECT TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,
            CASE DATA_TYPE
            WHEN 'varchar' THEN CHARACTER_OCTET_LENGTH +2
            WHEN 'char' THEN CHARACTER_OCTET_LENGTH 
            WHEN 'tinyblob' THEN CHARACTER_OCTET_LENGTH  + 1
            WHEN 'longblob' THEN  0 #CHARACTER_OCTET_LENGTH  + 4
            WHEN 'longtext' THEN CHARACTER_OCTET_LENGTH  + 4
            WHEN 'blob' THEN CHARACTER_OCTET_LENGTH +2
            WHEN 'text' THEN CHARACTER_OCTET_LENGTH +2
            WHEN 'tinyint' THEN 1
            WHEN 'smallint' THEN 2
            WHEN 'int' THEN 4
            WHEN 'bigint' THEN 8
            WHEN 'float' THEN 4
            WHEN 'double' THEN 8
            WHEN 'decimal' THEN NUMERIC_PRECISION +2
            WHEN 'date' THEN 3
            WHEN 'time' THEN 3
            WHEN 'year' THEN 1
            WHEN 'datetime' THEN 8
            ELSE CHARACTER_OCTET_LENGTH
        END
        AS LENGTH
    FROM COLUMNS n
    WHERE TABLE_SCHEMA = "ec_business_v3_test"
    #某个表
    #AND table_name = "table_name "
    #包含某字段的表
    AND table_name IN(SELECT a.table_NAME FROM TABLES a INNER JOIN COLUMNS b ON     a.TABLE_NAME = b.TABLE_NAME
    AND b.COLUMN_NAME = 'code' WHERE a.TABLE_SCHEMA = 'test' GROUP BY a.table_NAME)
    ) a
    GROUP BY a.TABLE_NAME
) b

 

二. 计算方式是表的存储大小/记录之和

#计算表数据大小的平均值,表存储大小/数据量之和
#问题:一.数据量小 二.分配大小以块递增,不是每添加一条内存就增加,初始16K
SELECT SUM(b.lenth)/1024 FROM (
    SELECT
      a.table_name,
      a.dates/a.table_rows AS lenth
    FROM (SELECT
            table_name,
            DATA_LENGTH           AS dates,
            table_rows
          FROM information_schema.TABLES
          WHERE table_schema = 'test'
          #某个表
          #AND table_name = "table_name"
          #包含code的表
          AND table_name IN(SELECT a.table_NAME FROM TABLES a INNER JOIN COLUMNS b ON                 
          a.TABLE_NAME = b.TABLE_NAME
          AND b.COLUMN_NAME = 'code' WHERE a.TABLE_SCHEMA = 'test' GROUP BY a.table_NAME)
     ) a
) b

有问题留言交流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值