使用游标 PLSQL 的性能

Posted

技术标签:

【中文标题】使用游标 PLSQL 的性能【英文标题】:Performance of using cursor PLSQL 【发布时间】:2020-03-10 02:12:32 【问题描述】:

我必须使用光标进行计数。 基本光标是

get *
from table

在这里,我想计算三种类型的数据。

sysdate < start_date
sysdate > startdate and sysdate < enddate
sysdate > enddate

我有两种方法。

    循环上述游标并使用 if 条件获取计数。

    根据条件创建3个单独的游标,直接获取计数

由于我有很多数据,从性能的角度来看,哪种方式更好?

【问题讨论】:

【参考方案1】:
    根本不要使用光标。

使用条件聚合。这几乎肯定比任何基于光标的方法都要快。

SELECT count(CASE
               WHEN sysdate < start_date THEN
                 1
             END) count1,
       count(CASE
               WHEN sysdate > startdate
                    AND sysdate < enddate THEN
                 1
             END) count2,
       count(CASE
               WHEN sysdate > enddate THEN
                 1
             END) count3
       FROM elbat;

【讨论】:

这是一个好方法。但我听说游标可以处理异常,这是我们在整个项目中使用的一个优势。如果我使用这个会是一个问题吗?。 你已经“听说过游标处理异常”,你听错了。游标只不过是一条 SQL 语句,它允许您一次处理返回 1 的行。他们无法处理异常。异常只能由 pl/sql 块的异常部分处理。你为它的作用编写代码。

以上是关于使用游标 PLSQL 的性能的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:使用游标更新的惊人性能

Sql server 游标与 While 循环的性能

PLSQL游标笔记一

如何通过在 PL SQL 中根据需要声明 Cursor 来提高性能?

PLSQL优化基础和性能优化 (学习总结)

PLSQL--游标