2010-11-11 121 views
0

我有一個MySQL UPDATE語句,它的運行時間太長 - 52秒mysql的update語句太長

update table_ea ea, table_a a 
    set ea.match_creator='S', a.match_state=N 
    where 
    ea.source_id=a.asset_id and 
    ea.source_name='S' and 
    ea.match_creator='S' and 
    ea.entity_id like 'S' 

問:

一),我們可以做在MySQL,因爲這update語句的解釋我們爲Select語句做什麼?
b)關於如何最小化更新時間的任何建議。

+0

考慮用像「優化MySQL更新速度的最佳實踐?」這樣的實際問題來改革你的問題(標題)。提供更多細節,表格的模式是什麼?此表中有多少行? – charstar 2010-11-11 22:32:09

回答

1

瞭解相應的select語句如何執行。您可能錯過了一個索引。

如果您希望我們檢查,您需要發佈表格信息。

嘗試張貼SHOW CREATE TABLE table_eaSHOW CREATE TABLE table_a

EXPLAIN SELECT ea.match_creator, a.match_state 
FROM table_ea ea, table_a a 
WHERE ea.source_id=a.asset_id 
AND ea.source_name='S' 
AND ea.match_creator='S' 
AND ea.entity_id like 'S'` 
+0

+1你的回答比我的回答稍好一些,基本上是一樣的。 :)我使用LIKE的爭論是,它經常表示某種用戶提供的,應用程序生成的搜索字符串,並且它_tends_會對查詢性能產生負面影響,但是您是對的,但情況並非總是如此。 – charstar 2010-11-11 22:47:52

+0

| id | select_type |表| |鍵入| possible_keys |鍵| key_len | ref |行|額外| | 1 | SIMPLE | ea | ALL | FK_EKB_ENTITY_ASSET,IDX_SOURCE_ID_NAME | NULL | NULL | NULL | 2647942 |在這裏使用w | | 1 | SIMPLE | a | ref | EKB_ASSET_IDX,ekb_asset_on_asset_id | EKB_ASSET_IDX | 386 | ekb.ea.source_id | 1 |在這裏使用w | – user476554 2010-11-11 22:53:12

+0

@ user476554:謝謝,但您可以更新問題,這將使其更具可讀性。無論如何,它看起來像在你的桌子上,沒有使用索引。將索引放在(source_name,match_creator和entity_id)上,查看解釋是否更改。 – Konerak 2010-11-11 22:56:44

0

如果要在創建索引的表的以下字段,以使其更快(它加速了連接):

ea.source_id

a.asset_id

ea.source_name

ea.match_creator

ea.entity_id

我也建議更換你用等運營商更換爲ENTITY_ID等運營商,原因在這種情況下,它是一樣的。

+0

我在表ea上有以下索引1)entity_id 2)source_id&source_name和asset_id在表上。現在你想如何創建一個索引?你想讓我在表中的所有列上創建一個索引(source_id,source_name,match_creator,entity_id)? – user476554 2010-11-11 23:30:52