2010-11-11 105 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