首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谓词"IN“在设备上非常慢(83倍差)

谓词"IN“在设备上非常慢(83倍差)
EN

Stack Overflow用户
提问于 2011-06-19 07:10:30
回答 2查看 371关注 0票数 2

我有一个谓词

谓词= NSPredicate谓词NSPredicate:@“character.id IN %@",索引;

它生成以下SQL:

CoreData: sql:选择t0.Z_ENT,t0.Z_PK,t0.Z_OPT,t0 . t0.ZMEANING,t0.CoreData,t0. ZCHARACTER,t0. t0.ZSTROKECOUNT,t0.ZCHARACTER,t0. t0.ZFREQUENCY,t0. WHERE,t0. t0.ZJLPTLEVEL,t0. t0.ZREADING,t0.t0.ZMEANING,t0. t0.ZROMAN,t0. t0.ZHWUN,t0.t0.ZHWUN,t0. t0.ZPHONETICID,t0. ZCHARACTERINFO t0外部加入ZCHARACTER t1 ON 0?t0.Z_ENT = ?)按t0. t0.ZSTROKECOUNT,T1. t1.ZUNICODE排序

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

CoreData: CoreData: sql时间: 0.0478s CoreData:注释:7行的总获取执行时间: 0.0483s。

设备上的VS (iPhone 3G)

CoreData: CoreData: sql时间: 3.9627s CoreData:注释:7行的总获取执行时间:3.9789 s。

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

代码语言:javascript
运行
复制
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行。

我想知道为什么设备速度这么慢。我漏掉了什么吗?有什么方法可以改进吗?谢谢。

更新:i怀疑连接是问题所在。因此,我尝试将t1.ZID移动到t0表中,以便可以去掉联接表。新的查询如下:

从(?,?,?)t0.Z_ENT = ?)按t0. t0.ZSTROKECOUNT定单

新的查询大约使用1.8s。它得到了改进,但似乎仍然很慢。应该是这么慢吗?

EN

Stack Overflow用户

发布于 2011-06-20 17:40:39

谢谢你的帮助。解决了这个问题。

  1. ,连接非常慢。淘汰加入,时间降至1.8~2s。(请参阅上面的更新)
  2. 查询没有使用索引或仅在Z_ENT上使用索引。对于ZCHARACTERID,它仍然执行整个表扫描。因此我添加了“在ZCHARACTERINFO上创建索引CID_Z_ENT_INDEX (ZCHARACTERID,Z_ENT)。

注意:添加新索引之后,解释查询计划仍然显示它使用Z_ENT索引。必须删除Z_ENT索引,以便可以使用CID_Z_ENT_INDEX。不知道为什么。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6401102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档