我可以考虑用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引擎。
答案 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页面加载上运行该查询..使用一些缓存来缓存该数字..