[英]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.