gpt4 book ai didi

grails - 为什么 sql.rows Groovy 方法这么慢

转载 作者:行者123 更新时间:2023-12-04 03:39:03 30 4
gpt4 key购买 nike

我尝试使用 sql.rows() Groovy 方法获取一些数据,但返回值需要很长时间。

所以我尝试了“标准”方式,它要快得多( 快 150 倍 )。

我错过了什么?

请看下面的代码:第一个方法在大约 2500 毫秒内返回结果,第二个在 15 毫秒内返回结果!

class MyService {

javax.sql.DataSource dataSource

def SQL_QUERY = "select M_FIRSTNAME as firstname, M_LASTNAME as lastname, M_NATIONALITY as country from CT_PLAYER order by M_ID asc";

def getPlayers1(int offset, int maxRows)
{
def t = System.currentTimeMillis()
def sql = new Sql(dataSource)
def rows = sql.rows(SQL_QUERY, offset, maxRows)
println "time1 : ${System.currentTimeMillis()-t}"
return rows
}

def getPlayers2(int offset, int maxRows)
{
def t = System.currentTimeMillis();
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
statement.setMaxRows(offset + maxRows -1);
ResultSet resultSet = statement.executeQuery(SQL_QUERY);
def l_list =[];
if(resultSet.absolute(offset)) {
while (true) {
l_list << [
'firstname':resultSet.getString('firstname'),
'lastname' :resultSet.getString('lastname'),
'country' :resultSet.getString('country')
];
if(!resultSet.next()) break;
}
}
resultSet.close()
statement.close()
connection.close()
println "time2 : ${System.currentTimeMillis()-t}"
return l_list
}

最佳答案

当您调用 sql.rows , 时髦的 eventually calls SqlGroovyMethods.toRowResult 对于结果集返回的每一行。

此方法询问 ResultSetMetaData每次为 resultSet 查找列名,然后将这些列中的每一列的数据从 resultSet 中提取到 Map 中,并将其添加到返回的 List 中。

在您的第二个示例中,您直接获取名称所需的列(因为您知道它们是什么),并且避免必须对每一行进行此查找。

关于grails - 为什么 sql.rows Groovy 方法这么慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923981/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com