mysql中insert into...select语句优化方式

 更新时间:2024年04月10日 08:33:00   作者:半桶水专家  
这篇文章主要介绍了mysql中insert into...select语句优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教<BR>

insert into...select语句优化

在MySQL中,INSERT INTO ... SELECT 语句可以导致源表(即SELECT部分的表)被锁定,这主要取决于事务的隔离级别以及表的存储引擎。

例如:

InnoDB存储引擎在默认的可重复读(REPEATABLE READ)隔离级别下会使用一致性读(consistent read)

通常不会锁定源表中的记录,但在某些情况下可能会使用间隙锁(gap locks)或者next-key锁,影响到并发性能。

优化INSERT INTO ... SELECT语句的策略

使用低事务隔离级别:

  • 例如,将隔离级别设置为READ COMMITTED可以减少锁的使用
  • 但在修改隔离级别前需要考虑应用程序的整体一致性要求

分批插入:

  • 若向目标表插入大量数据,可以考虑将其拆分成多个小批量的插入操作。
  • 这样可以减少对源表的锁定时间,并降低对数据库性能的影响。

优化SELECT查询:

  • 确保SELECT部分的查询被高效执行
  • 比如使用索引来减少查询时间和锁定时间

限制索引锁:

  • 如果使用InnoDB并且确实出现了间隙锁定
  • 可以通过优化查询条件来减少间隙锁的使用

避免高峰时段操作:

  • 尽量避免在系统负载高的时段运行大型的INSERT INTO ... SELECT操作。

使用INSERT DELAYED:

  • 如果表的存储引擎支持(如MyISAM)
  • 可以使用INSERT DELAYED语句,它将插入操作排队,减少对表的即时锁定。

调整锁等待超时时间:

  • 如果锁冲突是一个问题,可以调整锁等待的超时时间
  • 使得锁定操作在等待太久后能够失败并重新尝试

使用临时表:

  • 先将数据插入到临时表中,然后再从临时表批量转移到目标表
  • 这种方法可以减少对原始表的锁定时间

考虑使用pt-online-schema-change或gh-ost工具:

  • 如果要对大表进行DDL操作并且想要最小化锁的影响
  • 可以使用这些工具进行在线DDL更改

需要注意的是,具体的优化策略取决于具体的使用场景,性能瓶颈的原因以及数据的特点。

因此,实施任何优化之前都应该仔细分析和测试以确保不会对系统的稳定性和数据的一致性产生负面影响。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql慢查询介绍及开启技巧详解

    mysql慢查询介绍及开启技巧详解

    这篇文章主要为大家介绍了mysql慢查询介绍及开启技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • mysql查询语句通过limit来限制查询的行数

    mysql查询语句通过limit来限制查询的行数

    这篇文章主要介绍了mysql查询语句,通过limit来限制查询的行数,需要的朋友可以参考下
    2014-02-02
  • MySQL中substr()函数的使用示例

    MySQL中substr()函数的使用示例

    mysql substr函数是用来截取数据库某一列字段中的一部分,本文主要介绍了MySQL中substr()函数的使用示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 阿里云centos7安装mysql8.0.22的详细教程

    阿里云centos7安装mysql8.0.22的详细教程

    这篇文章主要介绍了阿里云centos7安装mysql8.0.22的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 浅谈mysql通配符进行模糊查询的实现方法

    浅谈mysql通配符进行模糊查询的实现方法

    这篇文章主要介绍了浅谈mysql通配符进行模糊查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • MYSQL  group by 有哪些注意事项

    MYSQL  group by 有哪些注意事项

    这篇文章主要介绍了MYSQL  group by 有哪些注意事项,比如我们不能在 group by 之后添加 where 查询语句,更多相关分享,需要的朋友可以参考下面文章内容
    2022-07-07
  • MySQL alter命令修改表语法实例详解

    MySQL alter命令修改表语法实例详解

    这篇文章主要给大家介绍了关于MySQL alter命令修改表语法实例详解的相关资料,在MySQL中ALTER指令的作用是修改已存在的数据库表的结构,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 怎样设置才能允许外网访问MySQL

    怎样设置才能允许外网访问MySQL

    大多数情况下,mysql数据库只要本机访问就可以了,这样的话,默认安装就OK,但是如果需要外网访问mysql数据库的话,应该如何操作呢,想知道的话,就好好看看下面的介绍吧
    2014-08-08
  • 以Centos为例讲解MySQL在Linux中的部署

    以Centos为例讲解MySQL在Linux中的部署

    这篇文章主要介绍了以Centos为例讲解MySQL在Linux中的部署,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Lost connection to MySQL server during query的解决

    Lost connection to MySQL server during query的解决

    经常在执行sql语句时,会发现这个问题,一般就是连接mysql数据库不稳定
    2008-06-06

最新评论