【问题标题】:Performace issues while using hibernate 'Restrictions.in'使用休眠“Restrictions.in”时的性能问题
【发布时间】:2021-07-02 16:52:06
【问题描述】:

我在 Oracle 中有一个表:UserDetail[id, name, country]。问题陈述是使用 Hibernate 从给定输入列表的列表中获取“名称”的所有“UserDetail”实体。最明显的解决方案是使用休眠标准 api 中的“Restrictions.in”:

//Session Construction code
List<String> usernames = getUserNames();   
Criteria criteria = session.createCriteria(UserDetail.class);
criteria.add(Restrictions.in("name", usernames)); //usernames -> List of usernames 
List<UserDetail> users = criteria.list();

问题是如果列表(用户名)的大小为 10k 并且数据库中存在的用户数大约为 1000 万左右,是否会有任何性能问题。想知道性能问题是什么,以及使用这种过滤器获取数据集的替代方法是什么。

提前致谢

【问题讨论】:

  • 找出答案的最佳方法可能是尝试一下。我想这应该不是问题,前提是“名称”列已正确编入索引

标签: java hibernate hibernate-criteria criteria-api


【解决方案1】:

如果此用户名列表是通过某种查询确定的,我建议您将该查询嵌入为子查询,因为这样通常会执行得更好。如果列表是由用户提供的,那么除了您已经拥有的之外,您无能为力。

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2015-09-15
    • 2011-07-11
    • 2017-01-02
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多