2012-12-20 21 views
0

这是与问题here有关的问题,我的问题是来自Java应用程序的视角。 如何优化查询数据库,如果我有一个web服务从数据库返回数据取决于客户端允许获取什么?从JDBC SQL中省略列SELECT选择过早优化?

  • 在Java代码中使用最大的一组列和过滤器值进行选择是否合理?
  • 或者是更好地构建许多SQL PreparedStatements/NativeQueries,每个只会询问将真正返回的列吗?
  • 是一个很好的折衷方案来构造基本查询只由连接的表而不是选定的列确定(这些都是)?

对于数据库和可维护应用程序都有什么好处?我现在所知道的:

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

回答

0

取决于通常是最好的,从性能的角度来看,在过滤数据库。如果这太牵扯,可能会更好从可读性的角度来做到这一点在客户端。

1

不,这不是一个过早的优化。只读取感兴趣的列;提取不感兴趣的列会增加网络往返次数,这会影响性能。

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