JPA查询效率过于缓慢的问题

问题描述

JPA查询效率过于缓慢的问题

一个最简单的JPA查询语句。hibernate4.0支持的JPA版本。在数据库执行原生SQL只要5ms在JPA entityManager里用query执行JPQL却需要400MS左右。我也是醉了。没法玩了JPA。求大神给答案

解决方案

Hibernate 处理 ManyToOne OneToOne的时候,default是Eager Fetch,导致取下来是整颗对象树,本以为是限制取的层数,实际发现不是,这个只是限制用JOIN连接表的层数,如果超过这么多层,下面的会另外生成SQL语句去取,直到完整一棵对象树取完,大量的SQL语句导致效率及其低下,域模型越复杂效率越低!
解决方式:ManyToOne OneToOne 都用lazy fetch,当需要使用lazy对象的时候,left join fetch 之。

时间: 2016-05-20

JPA查询效率过于缓慢的问题的相关文章

java-html页面查询效率低下是什么原因?

问题描述 html页面查询效率低下是什么原因? html页面查询效率低下是什么原因?html页面查询效率低下是什么原因?html页面查询效率低下是什么原因?html页面查询效率低下是什么原因?html页面查询效率低下是什么原因?html页面查询效率低下是什么原因?html页面查询效率低下是什么原因?点击查询按钮,查询缓慢 解决方案 你先检查一下你的查询语句 看下你的查询语句在数据库里面的消耗是多少 如果没什么问题 那可能就是将数据集绑定到页面的时候效率比较低了 解决方案二: 这个原因有很多,例如

MYSQL列类型选择与MYSQL查询效率

    4.3 列类型选择与查询效率    要选择有助于使查询执行更快的列,应遵循如下规则(这里,"BLOB 类型"应该理解为即包含B L O B也包含TEXT 类型):    ■ 使用定长列,不使用可变长列.这条准则对被经常修改,从而容易产生碎片的表来说特别重要.例如,应该选择CHAR 列而不选择VARCHAR 列.所要权衡的是使用定长列时,表所占用的空间更多,但如果能够承担这种占涞暮姆眩褂枚ǔば薪仁褂每杀涑さ男写砜斓枚唷?br>     ■ 在较短的列能够满足要求时不要

SQL Server查询效率优化

查询效率分析: 子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询.在这种情况下可以考虑用联接查询来取代. 如果要用子查询,那就用EXISTS替代IN.用NOT EXISTS替代NOT IN.因为EXISTS引入的子查询只是测试是否存在符合子查询中指定条件的行,效率较高.无论在哪种情况下,NOT IN都是最低效的.因为它对子查询中的表执行了一个全表遍历. 建立合理的索引,避免扫描多余数据,避免表扫描! 几百万条数据,照样几十毫秒完成查询. 机器情况 p4: 2.4 内存: 1 G o

提高SQL的查询效率

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.   2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:        1 select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:           1 select id from t where num=0   3.应尽量避免在

主键 索引 查询效率-主键和索引哪个查询效率更快??

问题描述 主键和索引哪个查询效率更快?? 1.有次面试被问到,主键和索引哪个查询更快?有没有哪个高手,能给详细解释下...在网上查了下,很多都只是给解释一统,簇聚索引和非簇聚索引,但没有特别明确给出答案.2.还有个问题是,如果在sql语句使用了函数,还能否给字段建立索引..求大侠赐教! 解决方案 1.1. 主键和索引都有很多种实现方式,对于同一种实现方式来说,速度是一样的1.2. 主键通常使用聚簇索引.可以认为聚簇索引是一种Hash索引,因此是比较快的2.用了函数能否建索引?当然是可以的.使用函

winform-求解决方案:oracle in 内部有几千条记录,如何提高查询效率

问题描述 求解决方案:oracle in 内部有几千条记录,如何提高查询效率 有一个winform程序 一个只有一列的datagridview,是几千条(也有可能是几万条)身份证号记录(此数据是从excel导入的) 数据库中有10多万条客户信息(如姓名.身份证.联系方式等) 然后我想实现的功能是,根据datagridview内的身份证数据,从数据中查出该身份证对应的相关信息,并在另一个datagridview中展现出来. 我现在使用的方法是 select * where sfzh in (),的

mysql-PHP 跨数据库查询效率问题求助

问题描述 PHP 跨数据库查询效率问题求助 直接上代码: $sql = "select mrn from A where type=2"; //mysql数据库 $result = $dbFin->query($sql); while ($row = $result->fetch_assoc()) { $sqlPid = "select name from TestDB.dbo.B where pid= '{$row['mrn']}'"; //sql s

select-mysql- sql查询 效率正常吗

问题描述 mysql- sql查询 效率正常吗 以下是sql: SELECT u.idu.orgcodeu.nameu.slaveuserCOUNT(*) FROM wx_xx_user u INNER JOIN wx_xx_wlzy w ON u.id=w.publisherid INNER JOIN wx_xx_wlzycomment wc ON w.id = wc.wlzyid INNER JOIN wx_xx_org org ON u.orgcode=org.orgcode WHERE

奇怪的现象-SQL Server 2008 r2 查询效率问题(求关注求关注求关注)

问题描述 SQL Server 2008 r2 查询效率问题(求关注求关注求关注) 我有一张表,共有56个字段.发现以下情况: 1.我在我的开发机执行sql语句 set statistics time on SELECT * FROM [eShop].[dbo].[Product] (多次执行,时间平均在90-100ms) 2.在服务器上有相同的数据库,相同的表,相同的内容.执行同样SQL语句,执行结果为: (多次执行,时间平均在250ms) 3.在我的开发机连服务器的数据库,执行该语句,执行结