我有一个 Commodity 表,定期与第三方的数据库同步更新
从第三方获取数据之后, 对于新数据或者已经存在的数据,我用 find_or_create,然后 update_attributes 来更新 但是对于第三方已经删除,而我的数据库里还留着的数据,我这边怎么检测出来?
我现在的办法是建一个叫 ids 的列表用来保存 id, 在更新每个数据的时候就将它的 id 存到列表里 ids << commodity.id 所有数据更新完之后再用 commodities.where("id NOT IN (?)", ids).delete_all 找到第三方数据中已经没有了的 id 然后删掉。
上次看赶集发的数据库军规里提到最好不要用负向的语句例如我这里的 NOT IN 请问我这么用了对数据库性能的影响大吗?有更巧妙的办法来更新数据吗?
题外话