gpt4 book ai didi

mysql - 计算 Laravel 中的查询时间?

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:39 28 4
gpt4 key购买 nike

我想获取表格中的第一行和最后一行,我找到了两种方法:

$first = DB::table('shops')->first();
$last = DB::table('shops')->orderBy('id','DESC')->first();

和:

$shops = DB::table('shops')->get();
$first2 = $shops[0];
$last2 = $shops[count($shops)-1];

我的问题是,对于相同的数据库,哪种方式执行得更快?或者以任何方式记录查询时间?

数据库可能很大,1.000 行,10.000 行,等等......

最佳答案

对于大约 8000 行,结果如下:

第一种方式:

[2016-03-01 19:14:11] local.DEBUG: select * from `shops` limit 1; in 1.27 ms   
[2016-03-01 19:14:11] local.DEBUG: select * from `shops` order by `id` desc limit 1; in 3.04 ms

第二种方式:

local.DEBUG: select * from `shops`; in 188.98 ms

你可以看到第二种方式比第一种方式慢很多。

因为在第二种方式中,您必须从 shops 表中获取所有记录。这需要很多次。

对于更大的数据集,我认为第二种方式不会因为请求超时而起作用。

更新:

只是为了另一个实验。

我尝试使用第三种方法在一个查询中解决您的问题,如下所示:

$shops = DB::table('shops')
->whereRaw('id = (SELECT MIN(id) from shops)')
->orWhereRaw('id = (Select MAX(id) from shops)')
->get();

而且我比较的是第一种方式。结果如下:

# the 3rd way
[2016-03-01 19:51:56] local.DEBUG: select * from `shops` where id = (SELECT MIN(id) from shops) or id = (Select MAX(id) from shops); in 1.04 ms
# the 1st way
[2016-03-01 19:52:02] local.DEBUG: select * from `shops` limit 1; in 0.67 ms
[2016-03-01 19:52:02] local.DEBUG: select * from `shops` order by `id` desc limit 1; in 0.5 ms

似乎使用子查询查询时间更快。

关于mysql - 计算 Laravel 中的查询时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35720019/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com