【发布时间】:2019-12-21 09:27:16
【问题描述】:
我需要从一个非常大的表中选择一个“页面”数据。由于 WHERE 子句和需要分页到相当大的偏移量,我使用子查询来获取 ID。仅当我将fetch 放在末尾时,此策略才有效。这导致(我认为)额外的数据库往返。有什么办法可以避免多余的fetch?
final Object subquery =
JooqUtil.DSL_CONTEXT
.select(ID_FIELD)
.from(MY_TABLE)
.where(conditionBuilder.build())
.orderBy(UPDATED_AT.asc())
.offset(offset.get())
.limit(limit.get())
.fetch();
return JooqUtil.toPreparedSql(
JooqUtil.DSL_CONTEXT
.select(JooqUtil.createFields(ALL_COLUMN_NAMES))
.from(MY_TABLE)
.where(ID_FIELD.in(subquery)));
附言我这样做的原因是由于大偏移量的 orderBy / offset / 限制(由于是 blob 类型,我选择的列之一不符合添加到索引的条件,因此我无法创建覆盖指数)。
【问题讨论】: