CKQuery使用" IN"非常慢。谓语

时间:2015-11-05 05:02:33

标签: ios swift cloudkit

首先我要说的是,这与尝试在后台线程中更新UI无关。

我试图在CloudKit中查询一些照片记录,每个记录包含一个eventId,缩略图和照片(以及其他内容)。由于我还在开发这个,因此公共数据库中只有大约75张照片记录。

我的谓词是: let predicate = NSPredicate(format: "eventId IN %@", myConcertIds)其中myConcertIds是一个字符串数组。在这种情况下,它有16个元素。

这需要大约10秒才能回来。想一想,将图像从简单的publicDB.performQuery切换回CKQueryOperation后,传输图像的速度很慢,并且只将eventId和thumbnail指定为所需的键。这仍然需要大约10秒钟。

你可以在这里看到,从我添加操作到第一个记录完成块触发的时间是11秒

2015-11-04 20:51:43.043 CKDataStack.getAllPhotoAlbumCovers[553]: Starting Query Operation (eventId IN %@ - myConcertIds)
2015-11-04 20:51:54.054 CKDataStack.getAllPhotoAlbumCovers[529]: Got one record 

我必须假设这是由于IN谓词,因为==查询返回的速度非常快,但我无法想到更有效的方法。我需要查询eventId与数组中的值匹配的记录。最终会有成千上万的记录,这只会慢一些

有什么建议吗? 11秒是等待用户的永恒

更新(来自评论)

我不确定所以我修改了调试版,是的,我只是得到了我要求的两把钥匙

2015-11-05 08:14:8.008 CKDataStack.getAllPhotoAlbumCovers[553]: Starting Query Operation (eventId IN %@ - myConcertIds) 
2015-11-05 08:14:16.016 CKDataStack.getAllPhotoAlbumCovers[529]: Got one record with keys ["eventId", "thumbnail"]  

作为我设置operation.resultsLimit = 1的另一个测试,它仍然需要8秒

我将谓词更改为NSPredicate(value: true)以测试我的假设,它仍然需要10秒。

0 个答案:

没有答案