可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

性能考虑

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

许多用户可能已经从 Hibernate 等更高级别的抽象切换到 jOOQ,因为 Hibernate 在处理大型数据库模式和复杂的二级缓存策略时,性能难以管理。 然而,jOOQ 本身并不是一个轻量级的数据库抽象框架,它也有自己的开销。 请务必考虑以下几点

  • 构造 jOOQ 查询需要一些时间。 如果您可以重用相同的查询,则可以缓存它们。 但要注意线程安全问题,因为 jOOQ 的 Configuration 不一定是线程安全的,并且查询“附加”到创建它们的 DSLContext
  • 呈现 SQL 字符串需要一些时间。 在内部,jOOQ 为整个查询重用相同的 java.lang.StringBuilder,但某些呈现元素可能需要一些时间。 当然,您可以缓存 jOOQ 生成的 SQL 并准备您自己的 java.sql.PreparedStatement 对象
  • 将值绑定到预处理语句需要一些时间。 在内部,jOOQ 不保留任何打开的预处理语句。 使用复杂的连接池,它将缓存预处理语句并通过标准 JDBC API 将它们注入到 jOOQ 中
  • 获取结果需要一些时间。 默认情况下,jOOQ 始终会将完整的 java.sql.ResultSet 获取到内存中。 使用延迟获取来防止这种情况,并在打开的底层数据库游标上滚动

明智地优化

不要被上面的段落吓到。 您应该明智地优化,即仅在真正需要对数据库进行非常高吞吐量的地方进行优化。 与纯 JDBC 相比,jOOQ 的开销通常每个查询少于 1 毫秒。

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo