0


MySql 查看占用空间,优化大表。

一 MySql查表占用空间大小

MySql查表占用空间大小:

SELECT 
    table_schema AS `Database`, table_name AS `Table`, 
    CONCAT(ROUND(((data_length + index_length) / 1024 / 1024), 2),' MB') `Size` 
FROM information_schema.tables 
WHERE table_schema='kyc'
ORDER BY (data_length + index_length) DESC;

查到各表空间容量按大到小排序,如下图:

上以发现一些大表,其中第一个表占用2百G。

二 MySql查数据库占用空间大小

MySql查数据库占用空间大小:

SELECT 
TABLE_SCHEMA, CONCAT(SUM(DATA_LENGTH)/1024/1024,' MB') AS DATA_SIZE, CONCAT(SUM(INDEX_LENGTH)/1024/1024,'MB') AS INDEX_SIZE
, CONCAT(SUM(DATA_LENGTH + INDEX_LENGTH)/1024/1024,' MB') AS TOTAL_SIZE
FROM information_schema.TABLES
GROUP BY TABLE_SCHEMA;

查到的各数据库大小,如下图:

三 MySql占用量大的表的优化

    在 MySQL 数据库优化中,表的大小、字段数、记录数等都可能影响数据库性能。没有固定的上限,但有一些优化建议和最佳实践可以帮助提高数据库性能。以下是一些个人实践经验汇总:

1. 表的大小

  • 物理大小建议: 一般建议单个表的大小不要超过4GB以上,特别是使用 MyISAM 存储引擎时。如果表变得过大,检索、插入和更新数据的性能都会受到影响。- 对于 InnoDB 存储引擎,由于它更具扩展性,大表的处理能力会更强,但最好一般的业务表不要超过50GB,简单的日记录表不要超过500g,(曾经有个项目发现超过500G数据库占用内存很高而且整体慢)特别是对于单个分区或分表。
  • 分区与分表(很重要): 如果一个表的大小超过了性能阈值,可以考虑使用 分区分表 来减小单个表的大小。例如,按日期、用户 ID 等字段进行水平分表或分区。

2. 字段数

  • 字段数建议: 表的字段数没有固定上限,但实践中,表的字段数不要超过30个字段以上, 否则可能会导致复杂的查询和维护问题。如果字段数非常多,可能意味着数据模型设计不合理,建议考虑进行规范化或拆分表。 - InnoDB 存储引擎:字段数理论上可以达到 1017 个,但这是极限值,实际操作中并不推荐使用这么多字段。

3. 记录数

  • 记录数建议: 单个表的记录数也没有硬性限制,但超过 数百万条记录 时,查询性能可能开始下降。常见的优化方法包括: - 添加适当的索引:索引能够显著加速查询,尤其是在记录数非常多时。但过多或不合理的索引会影响插入和更新性能。- 使用分页查询:避免一次性加载过多数据,分页查询能够减轻服务器负担。- 表分区:如果表中的数据是根据某个特定条件(如日期、区域等)经常被查询,可以考虑使用表分区技术来提高查询性能。

小结

  • 单表大小:尽量控制在几GB以内,InnoDB 允许更大的表,但需要谨慎对待大表。

  • 字段数:字段数不宜过多,超过 30 个字段以上可能需要重新设计数据模型。

  • 记录数:记录数在设计时要提前考虑到有哪些会特别大会超过百万与千万条或上亿,需要优化索引、多字段的大表的字段类型的选择不要选text或更长的类型,大表一般在设计前使用分区或分表技术。

      这些建议并非硬性标准,而是基于实际经验的最佳实践。数据库的具体限制和优化策略还需要根据实际的应用场景和业务需求来决定。
    
标签: mysql 数据库

本文转载自: https://blog.csdn.net/qyhua/article/details/135503030
版权归原作者 qyhua 所有, 如有侵权,请联系我们删除。

“MySql 查看占用空间,优化大表。”的评论:

还没有评论