MySQL -获得近似的通用方式.以字节为单位的行大小



好吧,我不会生气,如果没有人想帮助我这个废话,但我想有一种方法来获得一个表的大致行逐行的字节大小在MySQL控制台(好吧,我使用phpMyAdmins SQL窗口)。

内部查询从模式中读取所需的表列,并将它们连接到语句中,同时向每个列名添加char_length()函数。我没有找到比使用SEPARATOR更好的方法,但是由于分隔符首先出现在第一个元素之后,所以我添加了两个无意义的元素:开始的"empty"和结束的"zzempty"。

最好的部分是,我认为这段代码做了我想要的,但问题是,结果被获取,但不显示。

什么是最简单的方法来获取结果的准备语句?是唯一的方法来获得结果,把它们放入一个表?

SET    @query = CONCAT('SELECT ',
 (select
   REPLACE(group_concat( column_name 
 ORDER BY
   CASE 
      WHEN column_name="empty" THEN 0 
      WHEN column_name = 'zzempty'THEN 99 
      ELSE 1 
   END,
   column_name   separator '`) + char_length(`'),
   'empty`) + ',
   '')     
 FROM
   (SELECT
      'empty' as column_name,
      '1' as id 
   UNION
   select
      column_name,
      1 as id     
   from
      information_schema.columns     
   where
      table_schema = 'DB_NAME'        
      and table_name = 'TABLE_NAME' 
   UNION
   SELECT
      'zzempty' as column_name,
      '1' as id ) t1      
group by
   id),' FROM `TABLE_NAME`');   
SET
@query2 = REPLACE( @query, '+ char_length(`zzempty',  '')  ;  
PREPARE stmt FROM @query2;  
Execute stmt ;

事实上,我认为一定有更简单的方法来获得行大小,但我没有找到。

使用SHOW TABLE STATUS语句更容易询问MySQL:

mysql> SHOW TABLE STATUS WHERE name='ApiRequest'G
*************************** 1. row ***************************
           Name: ApiRequest
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 105
 Avg_row_length: 1872
    Data_length: 196608
Max_data_length: 0
   Index_length: 16384
      Data_free: 2520776704
 Auto_increment: 114
    Create_time: 2015-05-29 13:00:13
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_unicode_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

相关内容

最新更新