我有一个谓词
谓词= 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在模型中定义了索引):
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。它得到了改进,但似乎仍然很慢。应该是这么慢吗?
发布于 2011-06-20 17:40:39
谢谢你的帮助。解决了这个问题。
,
注意:添加新索引之后,解释查询计划仍然显示它使用Z_ENT索引。必须删除Z_ENT索引,以便可以使用CID_Z_ENT_INDEX。不知道为什么。
https://stackoverflow.com/questions/6401102
复制相似问题