Sql Insert,获取最佳实践

时间:2013-12-06 01:27:27

标签: mysql sql database

我想知道将插入语句解压到DBMS的最佳方法是什么。

  • 首先存储您所说的所有值,从像ArrayList这样的dataStructure中的网站中删除是否更好?

  • 或者最好在循环中执行此操作,为每行数据调用insert语句报废?第一种方法将占用一些内存,但是会比第二种方法保持连接开放的时间更短。

  • 此外,在while循环的每次迭代结束时关闭连接是一个好习惯吗?或者更好的是在整个循环期间保持连接打开并在结束时关闭它一次?

请帮我回答这些问题。

1 个答案:

答案 0 :(得分:1)

您的问题没有明确的答案。 取决于对许多因素的影响。仅举几例:

  • 您正在使用什么引擎
  • 您使用的是什么版本的MySQL
  • 如何配置MySQL
  • 您要插入多少行
  • 目标表中有多少个索引?

这是一个很好的阅读Speed of INSERT Statements。这是简短的摘录:

  

插入行所需的时间由以下确定   因素,数字表示大致比例:
   - 连接:(3)
   - 向服务器发送查询:(2)
   - 解析查询:(2)
   - 插入行:(1×行的大小)
   - 插入索引:(1×索引数)
   - 结束:(1)

因此,如果您最关心插入速度而不是并发性,那么这里有一些提示:

  • 将数据库(连接)的往返次数保持最小,最好是一次
  • 将INSERT语句的数量保持在最小值,最好是一个
  • 如果使用多个INSERT语句,请考虑将它们全部包装或在(a)事务中批量处理
  • 如果您在循环中发出INSERTS,请使用预准备语句
  • 了解并使用特定于您正在使用的引擎的优化
  • 在某些情况下,当您执行大量插入操作时,删除索引并在完成插入后重新创建它们可能会有所帮助