数据库结果集(ResultSet)优化通常是指:在查询返回数据后,如何更高效地处理、传输、消费结果,避免内存溢出、网络瓶颈和性能浪费。下面从数据库端、驱动/连接层、应用层三个维度系统说明。
❌ SELECT *
✅ SELECT id, name, status
LIMIT 100
或分页:
LIMIT 20 OFFSET 40
避免一次性返回百万级数据。
WHEREORDER BY create_time DESC
如果 create_time 有索引,结果集生成更快。
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY
);
stmt.setFetchSize(Integer.MIN_VALUE); // 流式读取
ResultSet rs = stmt.executeQuery(sql);
✅ 优点:
❌ 缺点:
stmt.setFetchSize(1000);
不同数据库默认值不同:
ResultSet.TYPE_FORWARD_ONLY
previous()❌
List<User> list = new ArrayList<>();
while (rs.next()) {
list.add(...);
}
✅
while (rs.next()) {
process(rs);
}
避免:
int count = 0;
while (rs.next()) {
// 处理
if (++count % 1000 == 0) {
flush();
}
}
WHERE id > ? ORDER BY id LIMIT 100
比 OFFSET 更快,尤其深分页。
❌ 一次查 100 万行到内存
❌ SELECT * + 全表
❌ 在结果集上做复杂计算
❌ 长事务 + 游标 占用连接
| 场景 | 推荐方式 |
|---|---|
| 报表导出 | 游标 + 流式写入 |
| 接口查询 | LIMIT + 索引 |
| 数据同步 | 分批 + 游标 |
| 大数据分析 | 预聚合 / OLAP |
如果你能说明:
我可以给你针对性代码示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。