下面由Laravel教程欄目帶大家介紹關(guān)于優(yōu)化Laravel數(shù)據(jù)庫查詢的18個技巧【推薦】,希望對大家有所幫助!
如果應(yīng)用運(yùn)行緩慢或存在大量數(shù)據(jù)庫查詢,請按照以下性能優(yōu)化提示來縮短應(yīng)用的加載時間。
1. 檢索大型數(shù)據(jù)集
本提示主要側(cè)重于提高處理大型數(shù)據(jù)集時應(yīng)用的內(nèi)存使用率。
處理大的集合時,分組檢索結(jié)果處理,而不是一次性檢索處理。
如下展示了從 posts
表檢索數(shù)據(jù)的過程。
$posts = Post::all(); // 使用 eloquent $posts = DB::table('posts')->get(); // 使用查詢構(gòu)造器 foreach ($posts as $post){ // 處理 posts 操作 }
上面的例子會從 posts 表檢索所有的記錄并處理。如果這個表達(dá)到了 100 多萬行呢?內(nèi)存將很快被耗盡。
為了避免在處理大型數(shù)據(jù)集時出現(xiàn)問題,我們可以檢索結(jié)果子集并按照下面的方式處理它們。
選項(xiàng) 1: 使用 chunk
// 當(dāng)使用 eloquent 時 $posts = Post::chunk(100, function($posts){ foreach ($posts as $post){ // Process posts } }); // 當(dāng)使用查詢構(gòu)造器時 $posts = DB::table('posts')->chunk(100, function ($posts){ foreach ($posts as $post){ // Process posts } });
以上例子從 posts 表中檢索 100 條記錄對其進(jìn)行處理,另外再檢索 100 條記錄進(jìn)行處理。此迭代將繼續(xù),直到處理完所有記錄。
這種方法將創(chuàng)建