2016-11-25 100 views
-4

基本思想是每一行都有一个唯一的项目ID,我用它来决定更新哪一行,并用数量更新它。我从一家公司的api导入库存到我自己的数据库中,并且有大约80k个项目。他们为项目细节和项目数量分开api端点,因此我需要先从第一个端点获取所有库存,然后再调用第二个库存并更新所有项目的数量。更新数据库中多行的最快方法是什么?

我最初的解决方案是循环,虽然我得到的结果和每个查询更新一行。这需要大约一个小时到一个半小时来更新所有80k项目。这只是需要多长时间来更新这么多的项目,或者是否有我可以做的任何SQL魔法?

谢谢

+0

你不能使用SQL'where'子句决定哪些行要更新。 SQL实际上不应该像这样使用。 –

+1

http://stackoverflow.com/a/20635881/284240 –

+0

@DannyCullen是的,这就是我说我正在做的事情,并且对于那么多的记录来说性能是可怕的。 sql如何不被用来更新db中的行? – stackOverNo

回答

1

我会做的第一件事是将更新数据存储在一个单独的表中。然后运行查询,例如:

update t 
    set . . . 
    from t join 
     results r 
     on t.?? = r.??; 

假设用于join列是索引的,那么这应该是一个多小时半更快。

+0

另一个不是MySQL的数据库支持散列连接。不仅仅是索引是不需要的,如果用于大容量,它们将会导致性能下降。对于80k行,假设“标准”平均行大小,更新将不到一秒钟。 –

相关问题