Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 事务块中查询之间的速度差异_Php_Laravel - Fatal编程技术网

Php 事务块中查询之间的速度差异

Php 事务块中查询之间的速度差异,php,laravel,Php,Laravel,我有一段代码需要锁定表以防止出现争用情况。 比如: 我最初认为selectbuilder方法会使模型不执行accessor方法,,但它似乎不起作用。 我在《邮递员》中测试了实际延迟时间,它比代码长得多 上述语句错误,未执行访问器方法。 因此,我的问题是,为什么下面的代码可以快得多: 下: DB::beginTransaction(); $ps = Product::lockForUpdate()->select(['sold', 'seller_id', 'id'])->whereI

我有一段代码需要锁定表以防止出现争用情况。 比如:

我最初认为selectbuilder方法会使模型不执行accessor方法,,但它似乎不起作用。 我在《邮递员》中测试了实际延迟时间,它比代码长得多

上述语句错误,未执行访问器方法。 因此,我的问题是,为什么下面的代码可以快得多:

下:

DB::beginTransaction();
$ps = Product::lockForUpdate()->select(['sold', 'seller_id', 'id'])->whereIn('id', $pids)->where([['sold', '>', 0]])->count();
if($ps > 0) {
....
}
第二个代码当然更快,但比第一个代码快近10倍。而且只有在DB::transaction块中,第一个代码才会非常慢。 我不知道第一个怎么这么慢。第一个代码将使用多少查询来生成模型对象。因此,如果我总是这样使用ORM代码,它会严重影响性能吗?或者,它可能只在事务块中运行缓慢,如果是,那么为什么


很抱歉,如果我的话不清楚,英语不是我的母语。

没有任何内容涉及访问器。当您访问属性时,访问器会运行,因此您可以尝试编写代码来避免这样做。这两个代码之间的区别在于您计算计数的方式。当然,SQL的计数比构建一个集合然后计算其计数要快。@IGP我知道第二个代码肯定更快。但是第一个代码的延迟几乎是第二个代码的10倍。我想知道这两个代码是如何产生如此大的差异的。经过一些实验,我发现问题可能不是来自访问者。所以我会更新我的问题。@Green-Sung,这不会改变我的答案。下面的代码速度更快,因为在数据库级别,它只是检索计数,然后服务器将其作为单个整数返回。上面的代码返回。。。我不知道数据库级别有多少行,然后这些行中的每一行都被转换成雄辩的模型,然后这些模型被放在雄辩的集合中。这是您要求服务器处理的模型数量。伯爵有多大?
DB::beginTransaction();
$ps = Product::lockForUpdate()->select(['sold', 'seller_id', 'id'])->whereIn('id', $pids)->where([['sold', '>', 0]])->count();
if($ps > 0) {
....
}