MySQL - 学习笔记 - 写入优化

Posted 笑虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - 学习笔记 - 写入优化相关的知识,希望对你有一定的参考价值。

mysql - 学习笔记 - 写入优化

用于优化的参数

参数说明
innodb_log_buffer_size需要修改 my.ini:设定 innodb 设置数据库引擎日志缓存区。单位Byte。默认值为1M,调整为16M
innodb_log_file_size需要修改 my.ini:设定 innodb 数据库引擎UNDO日志的大小;从而减少数据库checkpoint操作。单位Byte。默认值为8M,调整为128M
unique_checks禁止对唯一索引(逐行)检查
foreign_key_checks禁止对外键的检查
autocommit禁止自动事务的自动提交
innodb_flush_log_at_trx_commit默认值为1;设置为0,日志缓存规则: 0可以提高写入速度
innodb_autoextend_increment当 tablespace 空间已经满了后,系统需要自动扩展多少空间。单位M。默认值为8M,调整为128M

查看当前值

SELECT
	@@unique_checks AS unique_checks,
	@@FOREIGN_KEY_CHECKS AS FOREIGN_KEY_CHECKS,
	@@autocommit AS autocommit,
	@@innodb_flush_log_at_trx_commit AS innodb_flush_log_at_trx_commit,
	@@innodb_autoextend_increment AS innodb_autoextend_increment,
	@@innodb_log_buffer_size / 1024 / 1024 AS innodb_log_buffer_size,
	@@innodb_log_file_size / 1024 / 1024 AS innodb_log_file_size

例子

-- ----------------------------
-- 适配新老系统 `temp_data`(728.961s)
-- ----------------------------
-- ----------------------------
-- 写入优化【开启】 (40.545s)
-- ----------------------------
SET GLOBAL unique_checks=0;
SET GLOBAL foreign_key_checks=0;
SET GLOBAL autocommit=0;
SET GLOBAL innodb_flush_log_at_trx_commit=0;
SET GLOBAL innodb_autoextend_increment=128;

-- ----------------------------
-- 创建表
-- ----------------------------
DROP TABLE IF EXISTS `temp_data`;
CREATE TABLE `temp_data` (
  `id` varchar(32) NOT NULL COMMENT '主键',
  `eid` varchar(32) NOT NULL COMMENT '事件id',
-- 	,PRIMARY KEY (`id`) 这里先不加主键。写入完成后再添加
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='合并结果表';

-- ----------------------------
-- 插入数据 (多环节拼接成事件流程表)
-- ----------------------------
INSERT INTO `temp_data`
SELECT * 
FROM (
	-- 登记上报
	SELECT UPPER( MD5( UUID() ) ) AS `id`, `eid` AS `eid`
	FROM `event_add`
	-- 派遣
	UNION ALL
	SELECT `id` AS `id`, `eid` AS `eid`
	FROM `event_send`
	-- 处理
	UNION ALL
	SELECT  `id` AS `id`, `eid` AS `eid`
	FROM `event_deal`
	-- 复核
	UNION ALL
	SELECT `id` AS `id`, `eid` AS `eid`
	FROM `event_check`
	-- 评价
	UNION ALL
	SELECT `id` AS `id`, `eid` AS `eid`
	FROM `evente_valuate`		
) as td
ORDER BY  rd.`eid` asc;

-- ----------------------------
-- 写入优化【关闭】
-- ----------------------------
ALTER TABLE `temp_data` ADD PRIMARY KEY (`id`); -- 添加主键
SET GLOBAL unique_checks=1;
SET GLOBAL foreign_key_checks=1;
SET GLOBAL autocommit=1;
SET GLOBAL innodb_flush_log_at_trx_commit=1;
SET GLOBAL innodb_autoextend_increment=64;

参考资料

官方文档:MySQL 5.7 Reference Manual / The InnoDB Storage Engine / InnoDB Startup Options and System Variables

以上是关于MySQL - 学习笔记 - 写入优化的主要内容,如果未能解决你的问题,请参考以下文章

读书笔记:《冯唐成事心法》

读书笔记:《冯唐成事心法》

MYSQL优化 学习笔记

MySQL《高性能MySQL》学习笔记,第四章,Schema与数据类型优化

ElasticSearch 学习笔记总结

学习笔记MySQL数据库高级版 - 索引优化慢查询锁机制等