是否从JDBC SQL SELECT中省略了过早优化的列?

时间:2012-12-20 15:06:24

标签: sql select jdbc prepared-statement jpql

这是与问题here相关的问题,我的问题是来自Java应用程序的问题。 如果我有一个web服务,根据允许的客户端从数据库返回数据,如何优化查询数据库?

  • 使用Java代码中的最大列集和过滤值进行选择是否有意义?
  • 或者构建许多SQL PreparedStatements / NativeQueries是否更好,每个只会询问真正返回的列?
  • 是一个很好的折衷方案,可以构建仅由连接表而不是选定列确定的基本查询(这些都是全部)?

数据库和可维护应用程序的优点是什么?我现在所知道的:

  • 大多数JDBC驱动程序/ SQL数据库优化SQL查询并缓存未来请求的优化版本。必须分析和比较每个新查询,必须找到或创建优化版本...并保留在内存中......在最坏的情况下,每个新变体都将生成新的优化版本。这些简单选择的优化版本是否相同?
    select name, surname from person
    select name from person
  • 写出许多选择变体很难看 - 每个变体都必须经过测试,维护,快速...

2 个答案:

答案 0 :(得分:1)

不,这不是一个过早的优化。仅获取感兴趣的列;获取不感兴趣的列会增加网络往返,从而影响性能。

获取额外列还可以防止数据库在可能需要仅访问索引的情况下可能取消对表的访问。

答案 1 :(得分:0)

从性能角度来看,通常最好是在数据库中进行过滤。如果这涉及太多,从可读性的角度来看,在客户端级别这样做可能会更好。