Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CoreData模型版本迁移_Iphone_Sql_Core Data_Sqlite_Migration - Fatal编程技术网

Iphone CoreData模型版本迁移

Iphone CoreData模型版本迁移,iphone,sql,core-data,sqlite,migration,Iphone,Sql,Core Data,Sqlite,Migration,我有一个模型正在成功迁移,但需要15-20秒。(显然,这必须作为后台任务而不是在启动时完成,否则我的应用程序将超时。) 20秒的延迟,不管在哪里进行,都是糟糕的用户体验。我一直在查看核心数据迁移的SQL输出,以了解主要瓶颈在哪里,我发现了这个有趣的说法 UPDATE ZSIZE SET Z_ENT = ( CASE WHEN Z_ENT = 9 THEN 10 ELSE Z_ENT END ) WHERE Z_ENT IN (9) 此语句似乎需要5秒钟(我的数据库中的其他表也有其他语句) 当然

我有一个模型正在成功迁移,但需要15-20秒。(显然,这必须作为后台任务而不是在启动时完成,否则我的应用程序将超时。)

20秒的延迟,不管在哪里进行,都是糟糕的用户体验。我一直在查看核心数据迁移的SQL输出,以了解主要瓶颈在哪里,我发现了这个有趣的说法

UPDATE ZSIZE SET Z_ENT = ( CASE WHEN Z_ENT = 9 THEN 10 ELSE Z_ENT END ) WHERE Z_ENT IN (9)
此语句似乎需要5秒钟(我的数据库中的其他表也有其他语句)

当然,由于(9)中语句末尾的
,它不需要在表中的每行运行case语句

为什么CoreData不运行这个语句呢

UPDATE ZSIZE SET Z_ENT=10 WHERE Z_ENT = 9


对于额外的积分,任何关于优化coredata迁移的其他提示/提示都将不胜感激

也许我对问题“”的回答很有用。这是关于多次迁移,以便能够向用户显示某种进度。

也许我对问题“”的回答很有用。这是关于多次迁移,以便能够向用户显示某种进度。

grumble希望避免自己编写任何代码……)@deanWombourne抱歉,在这种情况下我能做的最多了。希望会有一个较少工作的答案;)我觉得你是对的;我可能不得不用UI技巧(一个进度条!)来修复它,而不是让它更快:(咕噜咕噜希望避免自己编写任何代码…:)@deanWombourne抱歉,在这种情况下我能做的最好了。希望会有一个较少工作的答案;)我觉得你是对的;我可能不得不用UI技巧(进度条!)来修复它,而不是让它更快:(我会避免尝试优化框架完成的迁移,它不一定是最快的,但它是正确的。您可以编写自己的迁移代码,只需将数据从一个存储复制到另一个存储,并在那里进行性能优化。我绝对不想自己做这件事!我只是int我想知道为什么它似乎在做一些荒谬的事情:)哈哈,当然,看起来根本原因是您更改了实体类型(通过切换父实体或实体名称)对于您的一个实体。case语句实际上是更新表中该值的最正确的方法,特别是在多个子实体受到影响并且必须重新出租的情况下。我不确定SQLite将如何处理该语句,这里没有足够的信息来说明这是否是您的偏头痛的真正问题我会避免尝试优化框架完成的迁移,这不一定是最快的,但它是正确的。你可以编写自己的迁移代码,只需将数据从一个存储复制到另一个存储,并在那里进行性能优化。我绝对不想自己做这件事我只是想知道为什么它似乎在做一些荒谬的事情:)哈哈,当然,看起来根本原因是您更改了其中一个实体的实体类型(通过切换父实体或实体名称)。case语句实际上是更新表中该值的最正确方法,尤其是在多个子实体受到影响且必须重新分配的情况下。然而,我不确定SQLite将如何处理该语句,这里没有足够的信息来说明这是否是迁移的真正问题。