Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance JPA getResultList比SQL查询慢得多_Performance_Jpa_Eclipselink - Fatal编程技术网

Performance JPA getResultList比SQL查询慢得多

Performance JPA getResultList比SQL查询慢得多,performance,jpa,eclipselink,Performance,Jpa,Eclipselink,我有一个(oracle)表,其中有大约500万条记录,还有一个相当复杂的查询,它使用数据库工具(如toad)在不到5秒内返回了大约5000条记录。 但是,当我通过entityManager(eclipseLink)运行查询时,查询会运行几分钟 我可能太天真了。 我有: Query Query=em.createNativeQuery(complexQueryString,Myspecific.class); ... 设置参数。。。 List result=query.getResultList(

我有一个(oracle)表,其中有大约500万条记录,还有一个相当复杂的查询,它使用数据库工具(如toad)在不到5秒内返回了大约5000条记录。 但是,当我通过entityManager(eclipseLink)运行查询时,查询会运行几分钟

我可能太天真了。 我有:

Query Query=em.createNativeQuery(complexQueryString,Myspecific.class); ... 设置参数。。。 List result=query.getResultList()

complexQueryString以“SELECT*”开头

我有什么样的优化? 可能只有一个是选择我以后真正需要的字段。一些解释会很好。

我也遇到了类似的问题(我试图在不到一秒钟的时间内读取8列的800000条记录),最好的解决方案是回到jdbc。结果集的创建和读取速度实际上是使用JPA的10倍,即使在执行本机查询时也是如此

如何使用jdbc:通常在J2EE服务器中,jdbc数据源可以作为@Resource注入

一个解释:我认为OR映射程序试图创建和缓存对象,以便以后可以很容易地检测到更改。这是一个非常大的开销,如果您只使用单个实体,就无法识别

可能有点帮助。它告诉jdbc驱动程序在一个块中返回多少行。只需在getResultList()之前调用它


JPA中的本机查询没有深入的数据库知识,意义有限。如果没有Myspecific类和queryagree,详细的anser是不可能的,特别是在这一部分:如果开发人员感觉控制级别较低,则使用JDBC;如果需要更高的逻辑级别,则使用JPA。对我来说,最糟糕的是在本机查询中混合使用JPA+大量编码。这两种查询都有缺点,它们在SQL server端正确地进行计算/过滤,具有设计良好的数据库(索引等),不会在客户端创建太多java对象side@JacekCz我同意,但有时问题会变得太复杂。我的用例是一个已经使用CTE的非常复杂的作业选择算法。
query.setFetchSize(5000);
query.getResultList();