2009-06-02 40 views
0

哪个更高效,多少?mysql性能对比

类型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..) 

第一版看起来短,并且第二可能变得非常长,当值表含有说500倍或甚至更多的值。

但我不知道谁的表现会更好,但感觉第一个应该是更高效,直观。

回答

2

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

但是,一般来说,我认为性能会随着行数变大而变得相似,特别是在索引良好的表上。大部分时间插入w /大型查询花费在建立索引等事务上(请参阅here),并且这些查询在没有关闭索引的情况下都必须这样做。

+0

我想+1这个,但我不想打破你的666代表。 ;) – 2009-06-02 03:11:51

0

我同意托德,第一个查询更清洁,将更快地发送到MySQL服务器,并更快地编译。而且,随着插入记录的数量增加,速度差可能会下降。

第一种形式拥有大量其他好处来考虑:

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