gpt4 book ai didi

ios - 谓词 "IN"在设备上非常慢(相差 83 倍)

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:56:34 28 4
gpt4 key购买 nike

我有一个谓词

predicate = [NSPredicate predicateWithFormat:@"character.id IN %@", indexs];

它生成以下 SQL:

CoreData: sql: SELECT t0.Z_ENT, t0.Z_PK, t0.Z_OPT, t0.ZCHARACTERID, t0.ZMEANING, t0.ZREADING, t0.ZRADICAL, t0.ZSTROKECOUNT, t0.ZCHARACTER, t0.ZFREQUENCY, t0.ZGRADE, t0.ZJLPTLEVEL, t0.ZKUNREADING, t0.ZHWUNMEANING, t0.ZROMAN, t0.ZHWUN, t0.ZHWUNMORE, t0.ZPHONETICID FROM ZCHARACTERINFO t0 LEFT OUTER JOIN ZCHARACTER t1 ON t0.ZCHARACTER = t1.Z_PK WHERE ( t1.ZID IN (?,?,?,?,?,?,?) AND t0.Z_ENT = ?) ORDER BY t0.ZSTROKECOUNT, t1.ZUNICODE

在模拟器中我得到了以下结果:

CoreData: annotation: sql connection fetch time: 0.0478s CoreData: annotation: total fetch execution time: 0.0483s for 7 rows.

设备上的对比(iPhone 3G)

CoreData: annotation: sql connection fetch time: 3.9627s CoreData: annotation: total fetch execution time: 3.9789s for 7 rows.

SQLite 解释查询计划显示我正在使用索引(ZID 具有在模型中定义的索引):

selectid    order       from        detail                                                                                      
---------- ---------- ---------- ---------------------------------------------------------------------------------------------
0 0 0 SEARCH TABLE ZCHARACTERINFO AS t0 USING INDEX ZCHARACTERINFO_Z_ENT_INDEX (Z_ENT=?) (~10 rows)
0 1 1 SEARCH TABLE ZCHARACTER AS t1 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
0 0 0 EXECUTE LIST SUBQUERY 1
0 0 0 USE TEMP B-TREE FOR ORDER BY
CPU Time: user 0.000395 sys 0.000184

在数据库中,我在字符表中有 20,900 行,在字符信息表中有 62,000 行。

我想知道为什么它在设备上这么慢。我错过了什么吗?有没有办法改善?谢谢。

更新:我怀疑加入是问题所在。所以我尝试将 t1.ZID 移动到 t0 表中,以便我可以摆脱连接表。新查询变为:

SELECT t0.Z_ENT, t0.Z_PK FROM ZCHARACTERINFO t0 WHERE ( t0.ZCHARACTERID IN (?,?,?,?,?,?,?) AND t0.Z_ENT = ?) ORDER BY t0.ZSTROKECOUNT

新查询用时约 1.8 秒。它得到了改进,但似乎仍然很慢。它应该像那么慢吗?

最佳答案

您的第一个查询的缓慢很可能源于 LEFT OUTER JOIN。

根据您报告的数据库大小,我认为 1.8 秒非常快,尤其是在 iPhone 3G 上。

如果这仍然不够快,我建议使用较低级别的数据库框架,它允许您直接操作数据库的架构并使用其他工具来加快查询速度。

关于ios - 谓词 "IN"在设备上非常慢(相差 83 倍),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401102/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com