我有一个表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();
我希望选择查询以获取大数据。
答案 0 :(得分:3)
基于我所看到的使用类似ORM工具的经验,例如休眠状态下,原始SQL查询总是比标准查询快。但是,假设在两种情况下都执行相同的基础SQL,原因是条件查询对结果集做了额外的工作。也就是说,条件查询必须完成将SQL结果编组为Java对象集合的工作。这需要进行一些序列化工作,等等。假设您需要原始查询的结果作为Java对象的集合,那么您可能不会注意到两者之间的执行时间有显着差异。
因此,假设正在对您的SQL数据库执行相同的查询,则唯一的时间差就是返回结果集后Java端发生的情况。