java - 哪个更快:标准查询或本机查询?
问题描述
我有一个可能包含 1000 条甚至更多记录的表 Admin。现在,我对使用哪个查询感到困惑,这样在获取整个数据时的性能不会受到影响。
我尝试使用本机查询和条件查询来获取数据,但仅适用于少量数据。我也研究了相关问题,但它并没有完全满足我的问题。
本机查询比 Hibernate 中的 HQL/Criteria 查询更快
我的实体类看起来像:
@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();
我希望选择一个可以获取大数据的查询。
解决方案
根据我所看到的使用类似 ORM 工具(例如 Hibernate)的情况,原始 SQL 查询总是比条件查询快。但是,假设在两种情况下都执行相同的底层 SQL,原因是条件查询对结果集进行了额外的工作。也就是说,条件查询必须完成将 SQL 结果编组为 Java 对象集合的工作。这需要一些序列化工作等。假设您需要将原始查询的结果作为 Java 对象的集合,您可能不会注意到两者之间的执行时间存在显着差异。
因此,假设对您的 SQL 数据库执行相同的查询,唯一的时间差异是返回结果集后 Java 端发生的情况。
推荐阅读
- html - 为什么在 html5 中加载视频之前,我的页面上会显示红色框?jerrittpace.com
- jquery - 滚动时隐藏 div 生效不需要的宽度
- java - JPanel 上paintComponent() 的性能不佳
- pytorch - DataParallel 如何确定我要使用哪个 gpu?
- c# - IdentityRole 和 IdentityUser 之间的网络核心区别
- neo4j - Cypher Query 需要很长时间才能找到结束节点
- python - 删除以 '.' 结尾的特定行的最后一个字符
- javascript - 使用javascript切换功能后,如何在浏览器调整大小时使导航链接重新出现/重置为默认值?
- c# - 如何防止其他程序重命名其他顶级窗口标题
- python - 计算一段时间内的平均值,而不是组内的平均值