SQLite:UPDATE,我索引哪个表?

时间:2014-07-12 07:09:20

标签: sqlite indexing sql-update

我在下面有一个查询,如果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)

我的问题是:我在哪个表上创建索引?我是否需要为两个表创建索引?

或者..有没有更快的方式来做我想做的事情?

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 )