好吧,我不会生气,如果没有人想帮助我这个废话,但我想有一种方法来获得一个表的大致行逐行的字节大小在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)