这是我的第一个核心数据项目,我需要关于加快提取请求的建议。大数据集上的核心数据提取请求速度慢
我的核心数据模型包含2个实体,Wells
和Fluids
。 Wells
有50,000条记录,而Fluids
有200万条记录。他们看起来像以下。
Wells
nams
relation
wellsToFluids
Fluids
text1, text2, etc.
relation
fluidsToWells
Wells
的提取请求非常快。 Wells
的提取请求与Fluids
的数据结合访问通过复合谓词通过wellsToFluids
关系缓慢。而且,我看到了不同谓词的意外取阅时间。
我在构建基于用户选择的复合谓词。但基本情况是Wells
以下
搜索:
predicateWithFormat: @"(wellNumber == 1)"
0.001秒
搜索上液体:
predicateWithFormat: @"(ANY wellsToFluids.text2 CONTAINS[c] stringToFind)"
1.3秒。 (在Mac模拟器 - 在iPhone或ipad很慢)
抓取上Wells
和Fluids
:
predicateWithFormat: @"(wellNumber == 1) AND (ANY wellsToFluids.text1 CONTAINS[c] stringToFind)"
3.2秒。
抓取上Wells
和多个Fluids
属性:
predicateWithFormat: @"(wellNumber == 1) AND (ANY wellsToFluids.text1 CONTAINS[c] stringToFind) AND (ANY wellsToFluids.text2 CONTAINS[c] stringToFind)"
6秒。
更改Fluids
谓词的一部分到子查询都有怪异的结果。
取上仅与子查询Fluids
:
predicateWithFormat:@"(SUBQUERY(wellsToFluids, $x, ANY $x.text1 CONTAINS[c] stringToFind)[email protected] !=0)"
12秒。
抓取上Wells
和Fluids
与子查询:
predicateWithFormat: @"(wellNumber == 1) AND (SUBQUERY(wellsToFluids, $x, ANY $x.text1 CONTAINS[c] stringToFind)[email protected] !=0)"
3.2秒。
对于从Fluids
获取的附加属性,时间不变,时间保持相当恒定的3.2秒。
还尝试从Fluids
提取,然后使用关系返回Wells
- 但这并没有提高速度。
有人可以给我一些改进获取设置的指针,或者它只是200万条记录的一个特征吗?
文本匹配谓词(如CONTAINS)通常比简单的“数字== 1”慢得多,特别是如果使用[c]搜索(不区分大小写)。我会首先检查“任何wellsToFluids.text1 CONTAINS stringToFind”或“任何wellsToFluids.text1 == stringToFind”在速度上有所不同。 –
谢谢 - 实际上确实尝试过。和你一样,认为它会产生很大的差异,但并没有产生显着的差异。 –
这是一个很好的问题,但下次请以正确的方式格式化。 –