2017-07-14 83 views
2
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個。爲什麼此CoreData獲取速度如此之慢?

我將數據庫從設備複製到桌面,並做了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    
+0

提取請求的外觀如何? –

+0

我已經完全消除了謂詞,它仍然是相同的速度。所以現在它只是一個純粹的對象獲取與排序在兩個日期字段。 – trapper

+0

你索引你的專欄嗎? – Manoj

回答

0

我想出了緩慢的原因。

其中一個對象屬性是NSData blob,它顯然絕對會殺死CoreData中的獲取排序。所以要注意這一點。

+0

因此,它畢竟不是兩個日期字段,呃? :) –

+0

那麼我在兩個日期字段上排序。另一個大數據字段的存在似乎只是消除sqlite獲取排序。後取數組排序工作在毫秒。 – trapper

+0

有趣,感謝您的澄清。 –

相關問題