【问题标题】:Improving stored procedure with multiple counts into output parameters改进具有多个计数到输出参数的存储过程
【发布时间】:2019-09-20 14:03:37
【问题描述】:

我有一个存储过程,它返回多个 OUT 参数,这些参数由来自 SELECT COUNT(*) 查询的结果组成。下面的代码 sn-p 运行良好,但似乎很慢。

我有多达 30 个不同的 OUT 参数,这意味着我运行了 30 个单独的查询,这可能就是查询运行如此缓慢的原因。

有人对我如何加快这段代码的速度有任何建议吗?

PROCEDURE get_counts(
   count1 OUT INT,
   count2 OUT INT,
   count3 OUT INT,
   .. etc.
) IS 
   l_count1 INT;
   l_count2 INT;
   l_count3 INT;
   .. etc.
BEGIN
   SELECT COUNT(*) INTO l_count1 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count2 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count3 from table1 where condition_blah;
   ... etc

   count1 := l_count1;
   count2 := l_count2;
   count3 := l_count3;
   .. etc
END get_counts;

【问题讨论】:

  • 我不认为你可以加快这个过程。该过程很慢,因为您运行多个选择不是由于 OUT 参数的数量。您必须优化查询,而不是过程。
  • 所有查询的“condition_blah”是否总是相同的?
  • 条件都不一样。

标签: sql oracle stored-procedures plsql


【解决方案1】:

使用条件聚合:

SELECT SUM(CASE WHEN condition_blah THEN 1 ELSE 0 END),
       SUM(CASE WHEN condition_blah2 THEN 1 ELSE 0 END),
       . . .
INTO l_count1, l_count2, . . . ;
FROM table1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2011-02-01
    相关资源
    最近更新 更多