MySQL 大数据量快速插入方法和语句优化分享

 更新时间:2012年04月14日 02:32:42   作者:  
对于事务表,应使用BEGIN和COMMIT代替LOCK TABLES来加快插入
锁定也将降低多连接测试的整体时间,尽管因为它们等候锁定最大等待时间将上升。例如:

复制代码 代码如下:

Connection 1 does 1000 inserts
Connections 2, 3, and 4 do 1 insert
Connection 5 does 1000 inserts


  如果不使用锁定,2、3和4将在1和5前完成。如果使用锁定,2、3和4将可能不在1或5前完成,但是整体时间应该快大约40%。

  INSERT、UPDATE和DELETE操作在MySQL中是很快的,通过为在一行中多于大约5次连续不断地插入或更新的操作加锁,可以获得更好的整体性能。如果在一行中进行多次插入,可以执行LOCK TABLES,随后立即执行UNLOCK TABLES(大约每1000行)以允许其它的线程访问表。这也会获得好的性能。

  INSERT装载数据比LOAD DATA INFILE要慢得多,即使是使用上述的策略。

  为了对LOAD DATA INFILE和INSERT在MyISAM表得到更快的速度,通过增加key_buffer_size系统变量来扩大 键高速缓冲区。

  INSERT语法

复制代码 代码如下:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]


  或:

复制代码 代码如下:


INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]


  或:

复制代码 代码如下:

 
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]


  一、DELAYED 的使用

  使用延迟插入操作DELAYED调节符应用于INSERT和REPLACE语句。当DELAYED插入操作到达的时候,服务器把数据行放入一个队列中,并立即给客户端返回一个状态信息,这样客户端就可以在数据表被真正地插入记录之前继续进行操作了。如果读取者从该数据表中读取数据,队列中的数据就会被保持着,直到没有读取者为止。

  接着服务器开始插入延迟数据行(delayed-row)队列中的数据行。在插入操作的同时,服务器还要检查是否有新的读取请求到达和等待。如果有,延迟数据行队列就被挂起,允许读取者继续操作。当没有读取者的时候,服务器再次开始插入延迟的数据行。这个过程一直进行,直到队列空了为止。

  几点要注意事项:

  INSERT DELAYED应该仅用于指定值清单的INSERT语句。服务器忽略用于INSERT DELAYED...SELECT语句的DELAYED。服务器忽略用于INSERT DELAYED...ON DUPLICATE UPDATE语句的DELAYED。

  因为在行被插入前,语句立刻返回,所以您不能使用LAST_INSERT_ID()来获取AUTO_INCREMENT值。AUTO_INCREMENT值可能由语句生成。

  对于SELECT语句,DELAYED行不可见,直到这些行确实被插入了为止。

  DELAYED在从属复制服务器中被忽略了,因为DELAYED不会在从属服务器中产生与主服务器不一样的数据。注意,目前在队列中的各行只保存在存储器中,直到它们被插入到表中为止。这意味着,如果您强行中止了mysqld(例如,使用kill -9)或者如果mysqld意外停止,则所有没有被写入磁盘的行都会丢失。

相关文章

  • mysql免安装制作使用说明

    mysql免安装制作使用说明

    mysql免安装版本的制作方法,需要的朋友可以参考下。
    2010-08-08
  • MySQL磁盘碎片整理实例演示

    MySQL磁盘碎片整理实例演示

    这篇文章主要给大家介绍了关于MySQL磁盘碎片整理的相关资料,为什么数据库会产生碎片,以及如何清理磁盘碎片,还有一些清理磁盘碎片的注意事项,需要的朋友可以参考下
    2022-04-04
  • mysql如何导出服务器内所有的数据库

    mysql如何导出服务器内所有的数据库

    这篇文章主要介绍了mysql如何导出服务器内所有的数据库问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • MySQL中如何添加新字段

    MySQL中如何添加新字段

    这篇文章主要介绍了MySQL中如何添加新字段方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • MySQL对中文进行排序详解及实例

    MySQL对中文进行排序详解及实例

    这篇文章主要介绍了MySQL对中文进行排序详解及实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • MySQL错误代码2058和2059的解决办法

    MySQL错误代码2058和2059的解决办法

    这篇文章主要介绍了MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,下面就来介绍一下解决方法,感兴趣的可以了解一下
    2025-03-03
  • mysql数据库中查询json的技巧大全

    mysql数据库中查询json的技巧大全

    这篇文章主要介绍了MySQL中JSON数据类型的各种函数,包括JSON_EXTRACT、JSON_UNQUOTE、JSON_SEARCH、JSON_SET、JSON_CONTAINS、JSON_REMOVE和JSON_REPLACE等,涵盖了JSON数据的提取、更新、删除和查询等功能,需要的朋友可以参考下
    2025-02-02
  • MySQL常见的底层优化操作教程及相关建议

    MySQL常见的底层优化操作教程及相关建议

    这篇文章主要介绍了MySQL常见的底层优化操作教程及相关建议,包括对运行操作系统的硬件方面及存储引擎参数的调整等零碎方面的小整理,需要的朋友可以参考下
    2015-12-12
  • Linux下mysql异地自动备份的方法

    Linux下mysql异地自动备份的方法

    这篇文章主要介绍了Linux下mysql异地自动备份的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • MySQL基础教程第一篇 mysql5.7.18安装和连接教程

    MySQL基础教程第一篇 mysql5.7.18安装和连接教程

    这篇文章主要为大家详细介绍了MySQL基础教程第一篇,mysql5.7.18安装和连接教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论