2015-05-17 72 views
0

以下查询:MySQL的更新运行缓慢

UPDATE `zydushr`.`performance` AS a1 , `zydusquiz`.`performance` AS a2 
SET a1.`Sales` = a2.`AchievementHQ` WHERE a1.`EmpNo` = a2.`EmpNo` 
AND a1.`Month` = a2.`Month` AND a1.`Year` = a2.`Year` ; 

的运行速度非常慢。我如何加快速度?

注:我已经创建了索引。

+0

你的问题询问有关SQL服务器,但你的标签包括MySQL,这是什么? –

+0

a1和a2表有多大? – Edig

+0

它可以超过447949条记录 –

回答

1
UPDATE 
`zydushr`.`performance` AS a1 
JOIN `zydusquiz`.`performance` AS a2 
ON a1.`EmpNo` = a2.`EmpNo` 
AND a1.`Month` = a2.`Month` 
AND a1.`Year` = a2.`Year` 
SET a1.`Sales` = a2.`AchievementHQ` 
+0

很好的关注他使用的十字连接。 – JRLambert

+0

它也需要与上面相同的时间...我已经运行查询,但仍然在运行阶段... –

+0

这不是一个交叉连接 - 请参阅'WHERE'子句。 (但是,'JOIN ... ON'是更好的形式。) –

0

对于速度,你需要一个复合指数:

INDEX(emp_no, year, month) 

也就是说一样INDEX(emp_no), INDEX(year), INDEX(month)

对日期和时间组件分别设置列通常是不好的做法。