对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是插入时间长。我们就有一个业务系统,每天的数据导入需要4-5个钟。这种费时的操作其实是很有风险的,假设程序出了问题,想重跑操作那是一件痛苦的事情。因此,提高大数据量系统的MySQL insert效率是很有必要的。
经过对MySQL的测试,发现一些可以提高insert效率的方法,供大家参考参考。
1. 一条SQL语句插入多条数据。
常用的插入语句如:
[sql]
- INSERTINTO`insert_table`(`datetime`,`uid`,`content`,`type`)VALUES('0','userid_0','content_0',0);
- INSERTINTO`insert_table`(`datetime`,`uid`,`content`,`type`)VALUES('1','userid_1','content_1',1);
修改成:
[sql]
- INSERTINTO`insert_table`(`datetime`,`uid`,`content`,`type`)VALUES('0','userid_0','content_0',0),('1','userid_1','content_1',1);
修改后的插入操作能够提高程序的插入效率。这里第二种SQL执行效率高的主要原因有两个,一是减少SQL语句解析的操作, 只需要解析一次就能进行数据的插入操作,二是SQL语句较短,可以减少网络传输的IO。
这里提供一些测试对比数据,分别是进行单条数据的导入与转化成一条SQL语句进行导入,分别测试1百、1千、1万条数据记录。
记录数 |
单条数据插入 |
多条数据插入 |
1百 |
0.149s |
0.011s |
1千 |
1.231s |
0.047s |
1万 |
11.678s |
0.218s |
2. 在事物中进行插入处理。把插入修改成:
[sql]
- STARTTRANSACTION;
- INSERTINTO`insert_table`(`datetime`,`uid`,`content`,`type`)VALUES('0','userid_0','content_0',0);
- INSERTINTO`insert_table`(`datetime`,`uid`,`content`,`type`)VALUES('1','userid_1','content_1',1);
- ...
- COMMIT;
使用事物可以提高数据的插入效率,这是因为进行一个INSERT操作时,MySQL内部会建立一个事物,在事物内进行真正插入处理。通过使用事物可以减少创建事物的消耗,所有插入都在执行后才进行提交操作。
这里也提供了测试对比,分别是不使用事物与使用事物在记录数为1百、1千、1万的情况。
记录数 |
不使用事物 |
使用事物 |
1百 |
0.149s |
0.033s |
1千 |
1.231s |
0.115s |
1万 |
11.678s |
1.050s |
性能测试:这里提供了同时使用上面两种方法进行INSERT效率优化的测试。即多条数据合并为同一个SQL,并且在事物中进行插入。
记录数 |
单条数据插入 |
合并数据+事物插入 |
1万 |
0m15.977s |
0m0.309s |
10万 |
1m52.204s |
0m2.271s |
100万 |
18m31.317s |
0m23.332s |
从测试结果可以看到,insert的效率大概有50倍的提高,这个一个很客观的数字。
注意事项:
1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packe配置可以修改,默认是1M。
2. 事物需要控制大小,事物太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会日志会使用磁盘数据,这时,效率会有所下降。所以比较好的做法是,在事物大小达到配置项数据级前进行事物提交。
分享到:
相关推荐
MySQL性能优化 MySQL性能优化就是通过合理安排资源,调整系统参数使MySQL运行更快、更节省资源。MySQL性能优化包括查询速度优化、更新速度优化、MySQL服务器优化等。本篇博客将从查询优化、数据库结构优化、MySQL...
MySQL的Insert锁机制是数据库管理系统中确保数据一致性和并发控制的重要组成部分。在MySQL的InnoDB存储引擎中,插入操作不仅涉及到行级锁,还可能涉及Gap锁和Next-Key Locks,这些锁机制的设计是为了防止幻读...
本文总结了一些常用的 MySQL 性能查询语句,帮助数据库管理员和开发人员更好地了解和优化数据库性能。 1. 查看 MySQL 本次启动后的运行时间(单位:秒) 使用语句:show status like 'uptime'; 该语句可以查看 ...
MySQL性能优化是数据库管理中的关键环节,它直接影响到应用程序的响应速度和整体系统效率。以下是一些关于MySQL性能优化的重要知识点: 1. **索引优化**:索引是提升查询速度的关键,合理创建主键、唯一索引和普通...
### MySQL性能优化与诊断 #### 一、MySQL存储引擎对比:MyISAM vs InnoDB 在MySQL中,MyISAM和InnoDB是最常用的两种存储引擎。对于不同的应用场景,选择合适的存储引擎至关重要。以下是对这两种存储引擎的主要特点...
MySQL 5.6性能优化是数据库管理中至关重要的一环,其目标在于提升系统运行效率,减少资源消耗,增强系统的响应速度。优化不仅涉及查询层面,还包括数据库结构的优化以及MySQL服务器本身的调整。以下将详细讨论这些...
特别是在涉及JavaEE技术栈的应用开发时,对MySQL数据库的性能优化更是面试中的高频问题。这篇文章将详细讨论MySQL数据库性能优化的相关知识点,这不仅是Java面试的热点,也是每一位数据库管理员和开发人员应该掌握的...
MySQL性能优化是一门深奥的技术,旨在通过调整和调整数据库的配置参数,来提高数据库的性能和效率。《MySQL性能优化权威指南》这本书深入地介绍了如何在实际应用中实现MySQL性能的优化。本书详细讲述了数据库连接池...
在性能优化方面,Oracle提供了更多的工具和选项,可以进行复杂的SQL调优。 ### 存储引擎和架构差异 MySQL和Oracle的架构差异导致了它们在存储引擎上的不同。MySQL的InnoDB存储引擎是一个事务型存储引擎,支持行级...
### MySQL 5.6 性能优化 #### 目标 - **理解优化的概念:** 首先明确什么是优化,即如何通过合理地分配资源和调整系统参数来提升MySQL的运行速度,同时减少资源消耗。 - **掌握查询优化方法:** 学习并运用各种...
基于 MySQL 数据库的查询性能优化研究 MySQL 数据库是当前网络环境中最流行的开源关系型数据库之一,随着网络环境中数据总量的急剧攀升,对数据库查询的响应时间提出了更严格的要求。为了提高查询效率,需要研究 ...
### MySQL性能优化集合 #### 一、MySQL优化概述 MySQL作为一种广泛使用的开源关系型数据库管理系统,在数据处理方面表现优秀。然而,在高并发、大数据量的情况下,可能会遇到性能瓶颈。因此,进行MySQL性能优化是...
### MySQL 5.6 性能优化 #### 目标 - **理解优化的概念:** 学习如何通过合理配置资源以及调整系统参数来提升 MySQL 的运行效率,并降低资源消耗。 - **掌握查询优化技巧:** 掌握一系列实用方法和技术来改善 SQL ...
MySQL 5.7 批量写入性能测试对比 数据库写入性能是数据库系统中一个...本篇文章对 MySQL 5.7 批量写入性能测试对比进行了详细的探究,我们可以通过优化各种参数来提高批量写入性能,从而提高数据库系统的整体性能。
MySQL性能优化是数据库管理中的关键环节,特别是在Java开发中,MySQL作为常用的关系型数据库,其效率直接影响到应用程序的响应速度和用户体验。以下是一些关于MySQL性能优化的核心知识点: 1. **索引优化**:索引是...
MySQL性能优化是一个复杂而系统的过程,它涉及到多个维度和层面,旨在提高数据库的响应速度,降低资源消耗,提升系统的整体效率。以下是从标题和描述中提取的几个关键知识点,并进行了详细的阐述。 一、SQL查询优化...
本教程将深入探讨MySQL的基本概念、安装配置、操作语法以及性能优化策略。 一、MySQL基本概念 1. 数据库:存储数据的容器,可以包含多个表。 2. 表:数据的二维结构,由列和行组成。 3. 列:定义表中的字段,每个...