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:多个查询与存储过程的主要内容,如果未能解决你的问题,请参考以下文章