记录一次大表优化

114 阅读1分钟

单表300万条数据,数据空间为3127.83M,索引空间为1774.58M,总大小为4902.41. 单条数据大小为1.37K.

优化思路:

1、修改innodb_buffer_pool_size,innodb_buffer_pool_instances * 。
   计算规则:innodb_buffer_pool_size = innodb_buffer_pool_instances * innodb_buffer_pool_chunk_size小于1G时,无需修改。
   建议innodb_buffer_pool_chunk_size小于1G时,无需修改innodb_buffer_pool_instances。
2、索引优化
    1、建立合适的索引,删除无效的索引。
    2、建立索引的字段长度、数据类型优化,降低索引大小。提高单个page上可以索引的个数。
3、降低数据量
    1、拆分数据表,将业务关注低的历史数据迁移到历史表。
    2、表中字段长度、类型的优化。
    3、删除废弃的字段。
    4、建立附加表移动超大长度字段到附加表中。
4、优化sql语句
    1、通过explain分析sql语句,是否使用索引,扫描数据量大小优化sql5、推动业务逻辑优化
    1、查询条件增加时间默认条件,降低单次查询数据量。比如时间段。

附加:

表空间查询语句
SELECT
	table_schema AS 'Database',
	table_name AS 'Table',
	round((( data_length ) / 1024 / 1024 ), 2 ) AS 'Size in MB',
	round((( index_length ) / 1024 / 1024 ), 2 ) AS 'Size in MB',
	round((( data_length + index_length ) / 1024 / 1024 ), 2 ) AS 'Size in MB' 
FROM
	information_schema.TABLES 
ORDER BY
	( data_length + index_length ) DESC;