:Criteria查询或本机查询哪个更快?

时间:2019-07-10 04:44:30

标签: java mysql

我有一个表Admin,其中可能包含1000条甚至更多的记录。现在,我对要使用哪个查询感到困惑,以便在获取整个数据时的性能不会受到影响。

我尝试使用本机查询和条件查询来获取数据,但仅用于少量数据。我也研究了相关的问题,但是并不能完全满足我的问题。

Which SQL query is faster and why?

Named Query, Native Query or Criteria API

Native query is faster than HQL/Criteria query in Hibernate

Which is better performance in hibernate native query or HQL

我的实体类看起来像:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String username;

private String emailAddress;

private String password;

private Character status;

使用条件查询:

 public List<Admin> fetchAdmin() {

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Admin> criteria = builder.createQuery(Admin.class);

    List<Admin> adminList = entityManager.createQuery(criteria).getResultList();

    return adminList;
}

使用本机查询:

@Query(value = "SELECT * FROM admin", nativeQuery = true)
List<Admin> fetchAllAdmins();

我希望选择查询以获取大数据。

1 个答案:

答案 0 :(得分:3)

基于我所看到的使用类似ORM工具的经验,例如休眠状态下,原始SQL查询总是比标准查询快。但是,假设在两种情况下都执行相同的基础SQL,原因是条件查询对结果集做了额外的工作。也就是说,条件查询必须完成将SQL结果编组为Java对象集合的工作。这需要进行一些序列化工作,等等。假设您需要原始查询的结果作为Java对象的集合,那么您可能不会注意到两者之间的执行时间有显着差异。

因此,假设正在对您的SQL数据库执行相同的查询,则唯一的时间差就是返回结果集后Java端发生的情况。