mysql性能比较

时间:2009-06-02 02:55:33

标签: mysql performance insert

哪个效率更高,效率是多少?

类型1:

insert into table_name(column1,column2..) select column1,column2 ... from another_table where 

columnX in (value_list)

类型2:

insert into table_name(column1,column2..) values (column1_0,column2_0..),(column1_1,column2_1..)

第一版看起来很短,第二版看起来非常长,当value_list包含500个甚至更多的值时。

但我不知道哪个人的表现会更好,但感觉第一个应该更直接地效率。

2 个答案:

答案 0 :(得分:2)

第一个更干净,特别是如果你的列已经在mysql中(我假设你说的是?)。您可以在网络开销中节省一些时间来发送数据和解析时间,并且不必担心会遇到客户端的任何查询大小限制。

但是,一般来说,我希望性能与行数越大越相似,特别是在索引良好的表上。大多数时候对于大型查询的插入都花费在构建索引(参见here)这样的事情上,并且如果没有关闭索引,这两个查询都必须这样做。

答案 1 :(得分:0)

我同意Todd的观点,第一个查询更清晰,发送到MySQL服务器的速度更快,编译速度更快。而且,随着插入记录数量的增加,速度差异将会下降。

第一种形式还有其他好处需要考虑:

  • 维护起来要容易得多:您只需要不时添加或修改字段。
  • 您可以避免查询another_table并处理结果以连接第二个查询(该方法的隐藏成本)的费用。
  • 如果您需要多次运行此更新,可以将第一个查询与其编译的表单和查询计划一起缓存在MySQL服务器中。这使得后续的查询调用运行得更快。