java - ResultSet:按索引检索列值与按标签检索

标签 java optimization jdbc resultset

在使用 JDBC 时,我经常遇到像

这样的结构
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    int id = rs.getInt(1);
    // Some other actions
}

我问自己(以及代码作者)为什么不使用标签来检索列值:

int id = rs.getInt("CUSTOMER_ID");

我听到的最好的解释是关于性能的。但实际上,它是否使处理速度非常快?我不相信,尽管我从未进行过测量。尽管按标签检索会慢一些,但在我看来,它提供了更好的可读性和灵 active 。
那么有人可以给我很好的解释来避免通过列索引而不是列标签来检索列值吗?两种方法的优缺点是什么(也许,关于某些 DBMS)?

最佳答案

警告:我要在这里夸夸其谈,因为这让我发疯。

99%* 的时间,人们有一些模糊的想法让事情变得“更好”,这是一种荒谬的微优化。这完全忽略了这样一个事实,即除非您一直处于非常紧张和忙碌的循环中,处理数以百万计的 SQL 结果(希望这种情况很少见),否则您永远不会注意到它。对于所有不这样做的人来说,开发人员维护、更新和修复列索引中的错误的时间成本远远大于性能极差的应用程序的硬件增量成本。

不要为这样的优化编写代码。为维护它的人编写代码。然后观察、测量、分析和优化。再观察,再测量,再分析,再优化。

优化几乎是开发的最后一步,而不是第一步。

* 图是编出来的。

关于java - ResultSet:按索引检索列值与按标签检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/186799/

相关文章:

java - 如何比较下拉选项与 Selenium WebDriver 中的 UI 选项是否匹配?

java - 如何让用户可以选择我的 JList?

MySQL my.cnf 性能调优建议

java - 测试对唯一标识符的查询是否最多返回一个结果

java - java 运行时环境检测到 fatal error ...无法理解为什么?

java - 在java中使用selenium包含或上传文件

java - Java中如何避免隐式调用父类的构造函数?

c - 优化 32 位值构造

optimization - 将 n 舍入为 m 的倍数的有效方法

postgresql - postgresql 的 jdbc 驱动程序的 "ResultSet.getMetaData.getTableName(col)"总是返回一个空字符串是否正确?