一个query下来,经常耗时达到5s这个速度也太慢了吧?
这个query快了一年,早些的时候速度还可以现在越发的慢了
var query = AV.Status.inboxQuery(user); if (sinceId) { query.sinceId(sinceId); } if (maxId) { query.maxId(maxId); } if (limit) { query.limit(limit); } query.include('source'); query.include('post'); query.include('post.likes'); query.find().then(function(statuses) {})
你好,请问 _Status 表,source 表,post 表,likes 表分别有多少条数据了,是否建过索引?
_Status表很少,才1500条记录post也是相当的数量级source在10W级likes和source相同
只是这个include,用啥做索引?objectId
超过 1 万条以上数据,请联系我们给你建索引,请报下 App ID。
抄送 @Proton
这个likes是默认和source都是user表,我刚刚查看了下,是有索引的
但是post没有,但是post只有1500条呢
appId是o49vknnavvgxfruo7gu7sxnm4hjdmzj4a6sgj4wa15opwmfr @Proton
尝试建立一些索引,然而提示“已经存在重复的数据,请勾选删除重复数据选项。“然而不能够删除数据呢
可以给一个比较慢的查询的例子么?
你需要到什么具体的样子?
用户, maxid,sinceid,limit,还有你那边消耗了多长时间
user 的objectId 是 5530393ae4b0840af8ddc03f,我不确定这个是否要登陆,如果需要,我晚点告诉你用户名和密码
maxid和sinceid都不需要,设置limit为10吧
这个是测试用户,内容比较少,但是查询用了2500ms 左右
如果用这个user 55292cb5e4b01e374f8aae55,查询下来的时间在8000ms左右,limit =1 时
发现这样查询你的 post.likes 数据量很大,query 中 include 进来开销也是很大的。能不能考虑把用到的 field 直接保存在 Post 中?
这个,post.likes有喜欢的用户呢,使用user的指针不是比直接放user的数据更好吗?这个不是很地道的用法?
还是说用AVRelation来建立这种关系?
这样用可以,只是会慢,因为直接 include 进来 API 还要多做很多查询。你可以试试看,不把 post.likes include 进来,速度就会降到一个可以接受的范围内。
如果额外的把需要的数据嵌进 post 里,就不用 include 了。这是一种常见的优化手段。
AVRelation 本质和 Pointer 的数组是一样的,只是有SDK提供的功能会比较容易用。