Java 在uniqueResult()之前使用setMaxResults(1)进行hibernate优化?

Java 在uniqueResult()之前使用setMaxResults(1)进行hibernate优化?,java,hibernate,sqlperformance,Java,Hibernate,Sqlperformance,她在写作 session.createCriteria(Person.class) .add(Restrictions.eq(“id”,personId)) .setMaxResults(1) .uniqueResult() 比写作更好 session.createCriteria(Person.class) .add(Restrictions.eq(“id”,personId)) .uniqueResult() 从优化的角度来看?第一个查询会更快吗?有时明确地将结果集行数限制为预期的数目可能会

她在写作

session.createCriteria(Person.class)
.add(Restrictions.eq(“id”,personId))
.setMaxResults(1)
.uniqueResult()

比写作更好

session.createCriteria(Person.class)
.add(Restrictions.eq(“id”,personId))
.uniqueResult()


从优化的角度来看?第一个查询会更快吗?

有时明确地将结果集行数限制为预期的数目可能会提示数据库构建更优化的查询执行计划


然而,在大多数数据库中,按主键查询是最理想的过滤条件,因此任何附加条件都不会带来任何好处。实际上,额外的sql片段只会增加语句解析时间和db优化器丢弃冗余筛选条件所花费的时间。

这取决于底层数据库,通常无法回答。使用jbdc记录器或查看您的sql日志,并分析结果查询的执行计划。因此,如果我不是通过主键而是通过其他方式在一个包含1m+行的表上进行查询,是否会节省大量时间?如果不能节省时间,也没有缺点,那么还是做吧?@darksmurf优秀的开发人员在不知道自己做什么的情况下不会做任何事情。如果你“仅仅因为”而编写冗余代码,那么你并不是在传达一种“我是一个有能力的程序员”的感觉。更不用说,即使在这种情况下有一个改进,这将是一个微观优化,这是另一个穷人开发者的信号。专注于真正重要的事情会得到更好的结果。@darksmurf在这种情况下,一切都取决于数据库、实际查询、索引等。不要过早优化。一般来说,混淆代码所带来的危害可能比不明显的性能提升带来的好处要大得多。如果您发现添加它可以显著提高性能,那么请添加它并将其记录在代码中的注释中,说明添加它的原因。