2009-06-02 43 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服務器中。這使查詢的後續調用運行得更快。