

场景:
当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题
- 数据的插入,查询时长较长
- 后续业务需求的扩展 在表中新增字段 影响较大
- 表中的数据并不是所有的都为有效数据 需求只查询时间区间内的
评估表数据体量
我们可以从表容量/磁盘空间/实例容量三方面评估数据体量,接下来让我们分别展开来看看
表容量:
表容量主要从表的记录数、平均长度、增长量、读写量、总大小量进行评估。一般对于OLTP的表,建议单表不要超过2000W行数据量,总大小15G以内。访问量:单表读写量在1600/s以内
查询行数据的方式: 我们一般查询表数据有多少数据时用到的经典sql语句如下:
- select count(*) from table
- select count(1) from table 但是当数据量过大的时候,这样的查询就可能会超时,所以我们要换一种查询方式
- use 库名
- show table status like '表名' ; 或 show table status like '表名'\G ;
上述方法不仅可以查询表的数据,还可以输出表的详细信息 , 加 \G 可以格式化输出。包括表名 存储引擎 版本 行数 每行的字节数等等,大家可以自行试一下哈
磁盘空间
查看指定数据库容量大小
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;
复制代码
查询单个库中所有表磁盘占用大小
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql'
order by data_length desc, index_length desc;
复制代码
查询出的结果如下:

建议数据量占磁盘使用率的70%以内。同时,对于一些数据增长较快,可以考虑使用大的慢盘进行数据归

本文介绍了在面对大数据表导致查询变慢的问题时,MySQL的三种解决方案:数据表分区、数据库分表(水平分表和垂直分表)以及冷热数据归档。讨论了每种方案的实现方式、优缺点以及适用场景,并提出了根据业务场景选择合适策略的建议。
最低0.47元/天 解锁文章
2385

被折叠的 条评论
为什么被折叠?



