Laravel:多个查询与存储过程

Posted

技术标签:

【中文标题】Laravel:多个查询与存储过程【英文标题】:Laravel: Multiple queries vs stored procedures 【发布时间】:2020-05-16 15:53:30 【问题描述】:

在我的应用程序中,我需要显示所选订阅者以前付款的日志,但当前付款除外。日志来自名为payments 的同一个表。

这是我的代码:

public function _paymentLog($token)

    # models
    $Self = new self();

    # fetching subscriber
    $subscriberId = $Self
        ->where('token', $token)
        ->select('subscriber_id')
        ->first()
        ->subscriber_id ?? null;

    if($subscriberId == null)
        return null;

    # returning
    return $Self
        ->where('subscriber_id', $subscriberId)
        ->where('token', '<>', $token)
        ->orderBy('id', 'DESC')
        ->get() ?? null;

创建一个存储过程而不是在应用程序中编写逻辑会是一个好主意吗?由于存储过程位于数据库内部,并且会更快地运行查询。另一方面,应用程序执行第一个查询,然后检查然后执行最终查询,我认为这是一个耗时的方法..?

【问题讨论】:

【参考方案1】:

从存储过程中节省的将是额外的往返时间。如果您的服务器是相当本地的,那么这不太可能很重要。如果您发出许多查询来检索一个满意的数据集,那么存储过程将是有意义的。

Sprocs 在以下情况下很有帮助:

1) 您正在向/从服务器发送大量数据以计算最终数据集(带宽和解析节省)

2) 当您对服务器有很多查询时,您可以发送带有几个参数的单个函数调用,我会选择(节省往返时间)。

在这个特定的例子中,看起来你不会节省很多,除非这个函数被执行很多很多次。

【讨论】:

以上是关于Laravel:多个查询与存储过程的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的存储过程如何返回查询到的多个值?

求教oracle存储过程的赋值和更新

sqlserver执行多个存储过程

MYSQL的存储过程如何返回查询到的行数据?

MySQL存储过程,处理多个游标和查询结果

无法在存储过程中执行多个查询而不会出现错误