0

这是与问题here相关的问题,我的问题是从Java应用程序的角度来看的。如果我有一个 Web 服务根据允许获取的客户端从数据库返回数据,如何以最佳方式查询数据库?

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

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

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

2 回答 2

1

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

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

于 2012-12-20T19:32:50.433 回答
0

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

于 2012-12-20T19:06:53.940 回答