我在下面有一个查询,如果Persistence表中的MD5(16char字符串)列与Tune表中的MD5列匹配,则会更新Tune表。
Tune表包含大约50,000条记录,大约需要29秒才能执行以下更新。我假设我可以使用索引(?)加快速度。实际上它没有WHERE语句的29秒和WHERE的17秒 - 但那还有很长时间。
UPDATE Tune
SET Rating = ( SELECT Rating FROM Persistence WHERE Persistence.MD5=Tune.MD5 LIMIT 1)
WHERE EXISTS ( SELECT Rating FROM Persistence WHERE Persistence.MD5=Tune.MD5 LIMIT 1)
我的问题是:我在哪个表上创建索引?我是否需要为两个表创建索引?
或者..有没有更快的方式来做我想做的事情?
答案 0 :(得分:0)
我将Persistence编入索引如下 - 现在我立即返回。
CREATE INDEX PERSISTMD5 ON Persistence (MD5);
UPDATE Tune
SET Rating = ( SELECT Rating FROM Persistence INDEXED BY PERSISTMD5 WHERE Persistence.MD5=Tune.MD5 LIMIT 1)
WHERE EXISTS ( SELECT Rating FROM Persistence INDEXED BY PERSISTMD5 WHERE Persistence.MD5=Tune.MD5 LIMIT 1 )