首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORMLite查询的高CPU负载

ORMLite查询的高CPU负载
EN

Stack Overflow用户
提问于 2013-07-10 00:39:30
回答 1查看 141关注 0票数 0

执行以下查询时,我们遇到了非常高的CPU负载:

代码语言:javascript
复制
        //find user
    QueryBuilder<UserDTO, Long> userQb = userDao.queryBuilder();
    userQb.where().idEq(userId);
    UserDTO data = userQb.queryForFirst();

    //find events
    if (data != null) {
        QueryBuilder<EventViewDTO, Long> eventQb = eventDao.queryBuilder();
        data.eventViews = (ArrayList<EventViewDTO>) eventQb.join(userQb).query();
    }

    return data;

最终得到的数据总共约为9kB。代码有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 01:52:10

生成的数据总共约为9kB。代码有什么问题吗?

我不认为你的代码有任何问题。如果您有一个很大的表,我会确保userId在索引中,但我怀疑这不是问题所在。

代码语言:javascript
复制
@DatabaseField(index = true)
private String userId;

如果event表中的外部UserDTO字段很大,您可能还想在该表中添加一个索引,但我也不认为性能问题出在Sqlite端,除非您的数据库很大。

您可以尝试的一种查询优化是在获取事件时使用另一个WHERE约束,而不是连接:

代码语言:javascript
复制
QueryBuilder<EventViewDTO, Long> eventQb = eventDao.queryBuilder();
// the "userDto" needs to be changed to whatever the foreign field name is
data.eventViews = eventQb.where().eq("userDto", data.id);

如果您查看您的日志,您可能会看到大量的GC活动,我怀疑这也是性能下降。虽然9k并不太大,但从DB的角度来看,它也不算小。您可以使用QueryBuilder.selectColumns(...)方法来查看在减少返回的数据量后,它是否会变得更快。实际上,您可能不需要所有列。

您可能还希望记录执行每个查询所用的毫米数,以确保是查询导致了问题,尽管您可能已经进行了一些分析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17553678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档