簡體   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