Java/PostgreSQL - 性能数据优化

标签 java postgresql optimization stored-procedures parameter-passing

好久不见了。我目前正在努力优化我的应用程序的性能。这是一个类似于我目前拥有的片段。

具有此查询的存储过程:

SELECT field_a, field_b, field_c
FROM table_a
WHERE field_a = param_a
AND field_b = param_b;

在 Java 中,我有这个 SampleParameterClassArrayList,其属性 paramAparamB 声明为 字符串

ArrayList<SampleParameterClass> sampleParams = new ArrayList<SampleParameterClass>();

sampleParams.add(new SampleParameterClass(stringValueForParamA, stringValueForParamB);

假设 sampleParams 由数百个元素填充。

try
    {
        conn = ConnectionPool.getConnection();

        con.setAutoCommit(false);

        CallableStatement myProcedure = connection.prepareCall("{ ? = call my_proc_name(?, ?) }");

        for(int paramCounter = 0; paramCounter < sampleParams.size(); paramCounter ++){

            myProcedure.registerOutParameter(1, Types.OTHER);
            myProcedure.setObject(2, sampleParams.get(paramCounter).getParamA);
            myProcedure.setObject(3, sampleParams.get(paramCounter).getParamB);
            myProcedure.execute();

            ResultSet rs = (ResultSet) myProcedure.getObject(1);

            while (rs.next()) {

                String resultA = rs.getString("param_a");
                String resultB = rs.getString("param_b");
                String resultC = rs.getString("param_c");

                myArrayListOfResult.add(new Result(resultA, resultB, resultC);

            }
        }

    }
    catch (SQLException e) {
        myProcedure.close();
        conn.close();
    }
}

基本上,上面的代码所做的是遍历 ArrayList 中的所有参数,并为每个参数调用存储过程。如果我有成千上万的数据要处理,它会像蜗牛一样慢,不是吗?

我的问题是:
1)即使队列中有数千个参数,是否可以只调用一次过程?类似于传递整个 ArrayList 参数。
2)如果以上问题无法回答,有什么方法可以最小化这个过程?

注:
- 对于带有 INSERT 语句的过程的相同问题。
-如果我错过了什么,我还没有找到与此类似的问题。请发布该问题的 URL,我会将其标记为该问题的答案。
-我还没有找到类似在过程中传递列表的阅读 Material 。

谢谢,非常感谢任何答案。

最佳答案

为什么不将参数作为带分隔符的字符串传递,然后在 postgresql 端使用 string_to_array(text, text [, text]) 将字符串转换为数组。

http://www.postgresql.org/docs/9.1/static/functions-array.html

Postgres integer arrays as parameters?

关于Java/PostgreSQL - 性能数据优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16536821/

相关文章:

java - 使用 Java 解析文本文件

java - 独立的应用程序,用 Java 构建

python - DataFrame 多目标排序定义 Pareto 边界

algorithm - 解决这个网格搜索问题的更好方法?

java - 防止方法在另一个包中被调用/覆盖

java - 如何使用 -Xlint :unchecked? 重新编译

postgresql - 角色分配在Postgres Operator中如何工作?

postgresql - HikariCP 连接池 - 'active' - 如何调试?

SQL 可搜索缓存 - 高可扩展性

php - 如何正确使用MySQL事务