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