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

Posted

技术标签:

【中文标题】从 JDBC SQL SELECT 中省略列是过早的优化吗?【英文标题】:Is omitting columns from JDBC SQL SELECT a premature optimization? 【发布时间】:2012-12-20 15:06:24 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于从 JDBC SQL SELECT 中省略列是过早的优化吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们的 Spring/Hibernate/JDBC/Websphere 系统中的连接过早关闭?

JDBC Select * from Where x=(?)

SQL 限制查询结果

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s)

如何最好地从 Java/JDBC 中的 SQL 查询中检索 SELECT COUNT(*) 的结果 - Long?大整数?

JDBC的结果集