注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

SQL优化之INSERT、UPDATE、DELETE

MySQL SQL 彭东稳 6755次浏览 已收录 0个评论

一、优化INSERT语句

为了优化插入速度,将许多小型操作组合成一个大的操作。理想情况下,您进行单个连接,一次发送许多新行的数据,并延迟所有索引更新和一致性检查,直到最后。

插入行所需的时间由以下因素确定,其中数字表示大致比例:

  • 连接:(3)
  • 向服务器发送查询:(2)
  • 解析查询:(2)
  • 插入行:(1×行大小)
  • 插入索引:(1×索引数)
  • 结束:(1)

假设B树索引, 表的大小减慢了日志中插入索引的速度。

您可以使用以下方法加快插入:

  • 如果同时从同一客户端插入多行,则使用INSERT带有多个VALUES列表的语句一次插入多行。这比使用单独的单行语句要快得多(在某些情况下快INSERT多倍)。如果要将数据添加到非空表,则可以调整bulk_insert_buffer_size变量以使数据插入更快。
  • 从文本文件加载表时,请使用LOAD DATA INFILE,这通常比使用INSERT语句快20倍。
  • 利用列具有默认值的事实,仅当要插入的值与默认值不同时才显式插入值,这将减少MySQL必须执行的解析,并提高插入速度。

二、优化UPDATE语句

UPDATE语句优化,就像SELECT查询一样 ,具有额外的写入开销。写入速度取决于更新的数据量和更新的索引数量,未更改的索引不更新。获取快速更新的另一种方法是延迟更新,然后在一行中执行许多更新,一起执行多个更新要比一次锁定表更快。

三、优化DELETE语句

删除MyISAM表中单个行所需的时间与索引数量成正比,要更快地删除行,您可以通过增加key_buffer_size系统变量来增加key缓存的大小 。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)or分享 (0)
关于作者:

您必须 登录 才能发表评论!