我有一个成功迁移的模型,但需要15-20秒。 (很显然,这不得不作为后台任务在启动时完成,否则我的应用将超时。)CoreData模型版本迁移
20秒的延迟,无论它在哪里完成,都是不好的用户体验。我一直在寻找的核心数据迁移的SQL输出看看那里的主要瓶颈是我发现了这个有趣的说法
UPDATE ZSIZE SET Z_ENT = (CASE WHEN Z_ENT = 9 THEN 10 ELSE Z_ENT END) WHERE Z_ENT IN (9)
这种说法似乎是服用5秒(并有他人在我的数据库中的其他表)。
当然,因为IN (9)
在声明的结尾,它不需要在表中每行运行一个case语句?
为什么CoreData不是只运行这个语句呢?
UPDATE ZSIZE SET Z_ENT=10 WHERE Z_ENT = 9
奖励积分,任何其他提示/如何优化coredata迁移的提示,将不胜感激!
我不想试图优化框架所做的迁移,它不一定是最快的,但它是正确的。您可以编写自己的迁移代码,只需将数据从一个商店复制到另一个商店,并在那里进行性能优化。 – ImHuntingWabbits 2011-06-17 07:31:34
我绝对不想自己做!我只是感兴趣,为什么它似乎做无意义的东西:) – deanWombourne 2011-06-17 09:03:56
哈哈肯定,它看起来像根本原因是你改变了实体类型(无论是通过切换父实体或实体名称)为您的实体之一。 case语句实际上是在表中更新该值的最正确方法,尤其是在多个子实体受到影响并且必须重新设置的情况下。然而,我不确定SQLite会如何处理这个声明,并且这里还没有足够的信息来判断这是否是您迁移的真正问题。 – ImHuntingWabbits 2011-06-17 15:03:28