我正在尝试获取符合我的条件的所有表的总大小(拉丁列,其中表排序规则不是拉丁文,带有文本或 varchar 列),但是我得到的大小与实际大小相差甚远尺寸。
mysql> select t.table_schema,sum(data_length + index_length)/1024/1024/1024
from tables t
inner join columns c on t.table_schema=c.table_schema and t.table_name=c.table_name
where t.table_schema in ('db1','db2')
and (c.collation_name like '%latin%' or c.character_set_name like '%latin%')
and (c.column_type like 'varchar%' or c.column_type like 'text')
and t.table_collation not like '%latin%'
group by t.table_schema;
+--------------+------------------------------------------------+
| table_schema | sum(data_length + index_length)/1024/1024/1024 |
+--------------+------------------------------------------------+
| db1 | 233.021102905273 |
| db2 | 93.742004394531 |
+--------------+------------------------------------------------+
2 rows in set (0.54 sec)
最佳答案
您需要连接一个子查询,该子查询仅返回每个表中与列约束匹配的一行。
select t.table_schema,sum(data_length + index_length)/1024/1024/1024
from tables t
inner join (
SELECT DISTINCT table_schema, table_name
FROM columns
WHERE (collation_name like '%latin%' or character_set_name like '%latin%')
and (column_type like 'varchar%' or column_type like 'text')
) c on t.table_schema=c.table_schema and t.table_name=c.table_name
where t.table_schema in ('db1','db2')
and t.table_collation not like '%latin%'
group by t.table_schema;
关于mysql - mysql中选定表的分组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39669918/