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

时间:2013-12-04 00:33:19

标签: php mysql performance count 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引擎。

3 个答案:

答案 0 :(得分:1)

MAX(ID)与计算行数不同,因此排除了五个备选方案中的两个。

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

答案 1 :(得分:0)

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

我一直在找同样的事情。 这3个结果与我测试的查询完全相同(您可以使用laravel debugbar观察)。 Laravel执行" SELECT COUNT(*)作为聚合FROM线程&#34 ;; 它已经用雄辩的方式进行了优化,但是如果你这样做 - > gt(get() - > count()它没有被优化! Threads :: count();

没有性能差异

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

答案 2 :(得分:-1)

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