繁体   English   中英

在Laravel中计算MySQL数据库中行数的最快方法?

[英]Fastest way to count number of rows in MySQL database in Laravel?

我可以想到几种方法来使用Laravel(版本3)计算表中的行数。

DB::table('threads')->count();
Threads::count();
Threads::max('id');
DB::table('threads')->max('id);
DB::query('SELECT COUNT(*) FROM threads;');

这些中的任何一个明显比其他任何一种都快吗? 有没有一种最快的方法来运行此查询? 稍后它将成为表达式的一部分: ceil(DB::table('threads')->count() / $threads_per_page); 并且它会在每次页面加载时执行,因此最好进行优化。

数据库/表是MySQL和InnoDB引擎。

MAX(ID)与对行进行计数不同,因此排除了五种选择中的两种。

然后,您的任务是在其余三种方法之间进行性能比较以获取计数。 我认为直接执行SQL语句可能会消除大量不必要的ORM层开销,并且实际上会更快,但这是过早的优化,除非经过事实证明。

DB::table('threads')->count();
Threads::count();
DB::query('SELECT COUNT(*) FROM threads;');

我在找同样的东西。 这3个结果与我测试过的查询完全相同(您可以使用laravel debugbar观看此查询)。 Laravel执行“ SELECT COUNT(*)作为FROM线程的聚合”; 它已经雄辩地进行了优化,但是如果您执行-> get()-> count(),它就没有优化! Threads :: count();没有性能差异

Max('id')完全不同,因为它输出最大id,它将永远不会计算行数。

我不认为这真的很重要..只是在您的代码中保持一致..以任何方式都不需要在evey页面加载时运行该查询..使用一些缓存来缓存该数字..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM