草庐IT

ios - 为什么这个 CoreData 获取这么慢?

coder 2024-01-22 原文

CoreData: sql:
SELECT t0.Z_ENT, t0.Z_PK, t0.Z_OPT, t0.ZCLIENTCREATEDAT, t0.ZCLIENTUPDATEDAT, t0.ZCREATEDAT, t0.ZDATERAISED, t0.ZID, t0.ZLOCKVERSION, t0.ZNAME, t0.ZSEQUENCENUMBER, t0.ZTYPE, t0.ZUPDATEDAT, t0.ZUUID, t0.ZVSYNCSTATUS, t0.ZVVERSION, t0.ZVVERSIONSTATUS, t0.ZCREATEDBY, t0.ZDATA, t0.ZOWNEDBY, t0.ZPROJECT, t0.ZPROJECTCOMPANY, t0.ZTEMPLATE, t0.ZWBSITEM, t0.ZACTIONTYPE, t0.ZSTATUS, t0.ZCOMPANY, t0.ZCLOSEDREASON, t0.ZDOCUMENTDATA, t0.ZSMARKWHENREADYTOSEND, t0.ZSPDFSYNCSTATUS, t0.ZSTATUS1, t0.ZAUTHORISATIONCODE, t0.ZBCCRECEIVED, t0.ZRECIPIENTEMAIL, t0.ZRECIPIENTNAME, t0.ZRFIRESPONSESTATUS
FROM ZBASEFORM t0
WHERE ((( t0.ZVVERSIONSTATUS = ? OR ( t0.ZVVERSIONSTATUS = ? AND  t0.ZVSYNCSTATUS = ?) OR ( t0.ZVVERSIONSTATUS = ? AND  t0.ZVSYNCSTATUS = ?)) AND  t0.ZPROJECT = ?) AND  t0.Z_ENT = ?)
ORDER BY t0.ZDATERAISED DESC, t0.ZCLIENTCREATEDAT DESC

CoreData: annotation: sql connection fetch time: 1.7336s
CoreData: annotation: total fetch execution time: 1.7462s for 1868 rows.

该表只有 1975 行,我正在获取其中的 1868 行。

我将数据库从设备复制到桌面并执行 sqlite> EXPLAIN SELECT ... 并得到了这个野兽。

addr  opcode         p1    p2    p3    p4             p5  comment      
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     105   0                    00               
1     SorterOpen     1     40    0     k(2,-B,-B)     00               
2     OpenRead       0     8     0     37             00               
3     OpenRead       2     76    0     k(2,,)         02               
4     Integer        7     1     0                    00               
5     SeekGE         2     60    1     1              00               
6       IdxGT          2     60    1     1              00               
7       Seek           2     0     0                    00               
8       Column         0     8     2                    00               
9       Eq             3     16    2     (BINARY)       44               
10      Ne             5     13    2     (BINARY)       54               
11      Column         0     6     4                    00               
12      Eq             6     16    4     (BINARY)       44               
13      Ne             5     59    2     (BINARY)       54               
14      Column         0     6     4                    00               
15      Ne             7     59    4     (BINARY)       54               
16      Column         0     12    4                    00               
17      Ne             8     59    4     (BINARY)       54               
18      Column         2     0     11                   00               
19      IdxRowid       2     12    0                    00               
20      Column         0     2     13                   00               
21      Column         0     24    14                   00               
22      Column         0     25    15                   00               
23      Column         0     26    16                   00               
24      Column         0     27    17                   00               
25      Column         0     3     18                   00               
26      Column         0     4     19                   00               
27      Column         0     29    20                   00               
28      Column         0     5     21                   00               
29      Column         0     30    22                   00               
30      Column         0     28    23                   00               
31      Column         0     31    24                   00               
32      Column         0     6     25                   00               
33      Column         0     7     26                   00               
34      Column         0     8     27                   00               
35      Column         0     9     28                   00               
36      Column         0     10    29                   00               
37      Column         0     11    30                   00               
38      Column         0     12    31                   00               
39      Column         0     13    32                   00               
40      Column         0     14    33                   00               
41      Column         0     15    34                   00               
42      Column         0     32    35                   00               
43      Column         0     16    36                   00               
44      Column         0     17    37                   00               
45      Column         0     18    38                   00               
46      Column         0     36    39                   00               
47      Column         0     19    40                   00               
48      Column         0     20    41                   00               
49      Column         0     21    42                   00               
50      Column         0     33    43                   00               
51      Column         0     22    44                   00               
52      Column         0     34    45                   00               
53      Column         0     35    46                   00               
54      Column         0     23    47                   00               
55      Copy           17    9     0                    00               
56      Copy           14    10    0                    00               
57      MakeRecord     9     39    48                   00               
58      SorterInsert   1     48    0                    00               
59    Next           2     6     1                    00               
60    Close          0     0     0                    00               
61    Close          2     0     0                    00               
62    OpenPseudo     3     49    40                   00               
63    SorterSort     1     104   0                    00               
64      SorterData     1     49    3                    00               
65      Column         3     2     11                   00               
66      Column         3     3     12                   00               
67      Column         3     4     13                   00               
68      Column         3     5     14                   00               
69      Column         3     6     15                   00               
70      Column         3     7     16                   00               
71      Column         3     8     17                   00               
72      Column         3     9     18                   00               
73      Column         3     10    19                   00               
74      Column         3     11    20                   00               
75      Column         3     12    21                   00               
76      Column         3     13    22                   00               
77      Column         3     14    23                   00               
78      Column         3     15    24                   00               
79      Column         3     16    25                   00               
80      Column         3     17    26                   00               
81      Column         3     18    27                   00               
82      Column         3     19    28                   00               
83      Column         3     20    29                   00               
84      Column         3     21    30                   00               
85      Column         3     22    31                   00               
86      Column         3     23    32                   00               
87      Column         3     24    33                   00               
88      Column         3     25    34                   00               
89      Column         3     26    35                   00               
90      Column         3     27    36                   00               
91      Column         3     28    37                   00               
92      Column         3     29    38                   00               
93      Column         3     30    39                   00               
94      Column         3     31    40                   00               
95      Column         3     32    41                   00               
96      Column         3     33    42                   00               
97      Column         3     34    43                   00               
98      Column         3     35    44                   00               
99      Column         3     36    45                   00               
100     Column         3     37    46                   00               
101     Column         3     38    47                   00               
102     ResultRow      11    37    0                    00               
103   SorterNext     1     64    0                    00               
104   Halt           0     0     0                    00               
105   Transaction    0     0     188   0              01               
106   TableLock      0     8     0     ZBASEFORM      00               
107   Integer        1     3     0                    00               
108   Integer        2     5     0                    00               
109   Integer        4     6     0                    00               
110   Integer        5     7     0                    00               
111   Integer        3     8     0                    00               
112   Goto           0     1     0                    00               

最佳答案

我找出了缓慢的原因。

其中一个对象属性是一个 NSData blob,它显然完全杀死了 CoreData 中的提取排序。所以要小心。

关于ios - 为什么这个 CoreData 获取这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45093710/

有关ios - 为什么这个 CoreData 获取这么慢?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  6. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  7. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  8. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  9. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  10. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

随机推荐