从 jdbcTemplate 查询中只获取一行以进行性能优化

Posted

技术标签:

【中文标题】从 jdbcTemplate 查询中只获取一行以进行性能优化【英文标题】:Get only one row from jdbcTemplate query for performance optimization 【发布时间】:2021-01-24 20:02:29 【问题描述】:
jdbcTemplate.query(getQuery(id),
        rs -> 
            if(rs.next()) 
                mainDTO.setSim(rs.getString("sim"));
                mainDTO.setImei(rs.getString("imei"));
            
        );

我使用上面的代码片段从数据库中检索数据并获取超过 100 条记录。但是对于所有记录,sim 和imei 号码是相同的。其他领域不同。执行上述代码时,我可以从第一条记录本身获取 sim 和 imei 号码。但是查询在所有记录上运行,因此需要 3 秒以上才能完成。这就是问题所在。 从第一条记录中获得 sim 和 imei 的值后,如何停止检索其他记录。我无法将sql查询更改为文档,需要在java代码本身中进行优化。

如何优化它以在 100 台以下的工厂内执行。

【问题讨论】:

【参考方案1】:

您有两个选择,要么限制使用 SQL 查询,要么使用 JdbcTemplate#setMaxRows

SQL

您需要编辑查询,包括将要选择的列和表名:

SELECT * FROM table LIMIT 1

JDBC

使用JdbcTemplate#setMaxRows 配置JdbcTemplate 最多返回一行:

jdbcTemplate.setMaxRows(1);

我猜它模仿Statement#setMaxRows

【讨论】:

以上是关于从 jdbcTemplate 查询中只获取一行以进行性能优化的主要内容,如果未能解决你的问题,请参考以下文章

从一对多关系 laravel 中只查询一行

jdbcTemplate 查询行映射日期列一般

spring jdbcTemplate查询使用

spring 如何获取 jdbctemplate

无法让 JdbcTemplate 回滚

MySQL INNER JOIN 从其他表中只选择一行