【发布时间】:2019-03-10 15:25:50
【问题描述】:
由于在使用 Hibernate JPA 时从 DB 作为实体获取大约 30k 结果的性能问题,我改为尝试编写一个 namedQuery 以更好地控制查询及其运行时。对于这几个实体,我最终得到的几乎是 20 秒,而这 20 秒对于“旧”查询和我自己的 namedQuery 是必需的(在 sql 客户端中执行时不需要一秒钟即可获得结果) ,所以基本上无论我使用namedQuery还是hibernate生成的查询都没有任何区别。
假设 98% 的时间用于将这些结果映射到其对应的实体是否安全?如果是这样,我应该如何加快速度?以下是我自己编写的查询(请注意,我必须明确说明 SELECT 中的所有列)
SELECT exp.ID
,exp.CREATEDBY
,exp.CREATEDTIME
,exp.DELETED
,exp.LASTCHANGE
,exp.LASTCHANGEBY
,exp.STATUS
,exp.BRIXFIGURE
,exp.GRAMMAGE
,exp.INDIVIDUALPACKAGING
,exp.MINORDERQUANTITY
,exp.PACKAGINGHEIGHT
,exp.PACKAGINGLENGTH
,exp.PACKAGINGWIDTH
,exp.PALETTESIZE
,exp.QUANTITY
,exp.UNIT
,exp.VALIDUNTIL
,exp.EXPORTELEMENT_START
,exp.EXPORTSTATUS
,exp.webServiceResponse
,exp.CATEGORYID
,exp.COMMENTID
,exp.SUPPLIERID
,exp.TRANSPORTPACKAGINGID
,exp.LocationId
,exp.PriceRowId
,exp.EXPORTELEMENT_ENDDATE
,exp.BASEPRICE
,exp.BASEUNIT
,exp.BARCODES
,exp.EXPIRYDATE
,exp.PREORDERPERIOD
,exp.EXPORTWEEKID
,exp.EXPORT_TENDER_UID
,exp.EXPORT_UID
,exp.CURRENCY_ID
,exp.WEIGHT_PER_BOX
FROM EXPORTELEMENT AS exp
JOIN EXPORTELEMENT_LOCATION as exlo ON exlo.EXPORTELEMENTID = exp.ID
WHERE exlo.LOCATIONID = :locationId
AND exp.EXPORTELEMENT_ENDDATE <= :endDate
AND exp.EXPORTELEMENT_START >= :startDate
AND exp.DELETED = :deleted
【问题讨论】:
标签: sql performance hibernate jpa