首页 > 解决方案 > 哪个更快:标准查询或本机查询?

问题描述

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

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

哪个 SQL 查询更快,为什么?

命名查询、本机查询或标准 API

本机查询比 Hibernate 中的 HQL/Criteria 查询更快

在休眠本机查询或 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();

我希望选择一个可以获取大数据的查询。

标签: javamysql

解决方案


根据我所看到的使用类似 ORM 工具(例如 Hibernate)的情况,原始 SQL 查询总是比条件查询快。但是,假设在两种情况下都执行相同的底层 SQL,原因是条件查询对结果集进行了额外的工作。也就是说,条件查询必须完成将 SQL 结果编组为 Java 对象集合的工作。这需要一些序列化工作等。假设您需要将原始查询的结果作为 Java 对象的集合,您可能不会注意到两者之间的执行时间存在显着差异。

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


推荐阅读