gpt4 book ai didi

php - Laravel:如何优化多个查询

转载 作者:行者123 更新时间:2023-11-29 05:06:26 25 4
gpt4 key购买 nike

对 HomeController 文件的查询会减慢网站速度。页面完全加载需要 20 秒。 (页面大小仅为 3.9 Mb,每次加载页面时 CPU 负载都会上升到 80%)。我被告知使用比 Elequant 更快的 Query Builder 并加入查询以将它们作为一个查询发送。我觉得这太难了。我在哪里可以看到这方面的一些示例?

家庭 Controller

public function index()
{
$sliders = Post::where('post_type','slider')
->with('FeaturedImage','PostField')
->orderBy('created_at', 'desc')
->limit(4)
->get();

$page1 = Post::where([
['post_type','=','custom_page'],
['slug','=','page1'],
])
->with('FeaturedImage','PostField')
->latest()
->first();


$page2 = Post::where([
['post_type','=','custom_page'],
['slug','=','page2'],
])
->with('FeaturedImage','PostField')
->latest()
->first();


$page3 = Post::where([
['post_type','=','custom_page'],
['slug','=','page-3'],
])
->with('FeaturedImage','PostField')
->latest()
->first();


$compacts = array(
'sliders',
'page1',
'page2',
'page3',
);
return view('site.home')->with(compact($compacts));
}

编辑:迁移后

public function up()
{
// Create table for storing roles
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('author_id');
$table->integer('category_id')->nullable();
$table->string('title');
$table->text('excerpt')->nullable();
$table->text('body')->nullable();
$table->string('slug')->nullable();//unique()
$table->string('post_type')->default('post');
$table->enum('status', ['PUBLISHED', 'DRAFT', 'PENDING'])->default('DRAFT');
$table->timestamps();
});
}

最佳答案

您正在对 posts 表运行四个查询,但没有一个使用索引。这意味着对 posts 表进行四次全表扫描。此外,您正在对非索引字段进行排序。这也可能导致性能问题。

您需要在 post_typeslug 上为您的查询条件建立索引。您可以创建两个单独的索引,也可以创建一个复合索引。这取决于您的应用需求。

$table->string('slug')->nullable()->index();
$table->string('post_type')->default('post')->index();

关于php - Laravel:如何优化多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47068721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com