我在页面加载数据时遇到问题。rich:datatable 用于显示公告列表。
公告类包括一组 AnnouncedLot 类,在映射中它被指定为
<set cascade="all,delete-orphan" lazy="false" name="lots" table="ad_lot">
<key column="lotId"/>
<many-to-many class="AnnouncedLot" column="anlotId"/>
</set>
AnnouncedLot 类映射是
<class name="AnnouncedLot" table="announcedLot">
<id name="id" type="java.lang.Long" unsaved-value="-1">
<generator class="native"/>
</id>
<property name="idValue" not-null="false" unique="true"/>
<property name="databaseId" not-null="false" unique="true"/>
<property length="4047" name="title"/>
<property length="4047" name="description"/>
<property length="4047" name="source"/>
<property length="65534" name="adText"/>
<property name="sum"/>
</class>
目前,数据库中大约有 150 万条公告和 350 万手。一份公告可以有 1 手甚至 100 手。
页面仅加载公告查询的 30 个第一个结果。当数据库中没有批次时,它会快速加载,但有批次可能需要大约 1.5 分钟。
我试图将lazy 更改为true 并用谷歌搜索这个问题,但没有找到太多。有人能帮忙吗?
更新:
在检查了哪些查询需要花费大量时间后,我发现行计数查询是原因。由于默认过滤器参数,查询包含lots.sum 条件。我已经更改了过滤器,因此它不必使用该组并且性能有所提高。
感谢大家的帮助。