gpt4 book ai didi

mysql - 如何优化 MYSQL 查询缓慢的 Order By

转载 作者:行者123 更新时间:2023-12-02 00:13:01 25 4
gpt4 key购买 nike

我正在尝试优化我的 MYSQL 查询。我的数据库中只有 2k 行,但是查询几乎需要 1.5 - 2 秒。由于 Laravel 应用程序中执行的其他查询,使用此查询的平均加载页面花费的时间太长,无法获得良好的用户体验。

当我删除 order by 时,查询只需要 0.03 秒。

select * 
from `companies`
left join `model_has_status` on `companies`.`id` = `model_has_status`.`company_id`
left join `statuses` on `model_has_status`.`status_id` = `statuses`.`id`
where `model_has_status`.`status_id` = (select `status_id`
from `model_has_status`
where `company_id` = `companies`.`id`
order by `created_at` desc
limit 1)
and `companies`.`deleted_at` is null
order by companies.`active_name` asc
limit 30 offset 0

Mysql解释有以下输出: screenshot of the MYSQL explain

我尝试在companys.active_name上添加索引。然而这并没有什么卵用。谁能指点一下我要优化什么?

为了完整起见,这是我从应用程序执行的 Laravel 查询:

$companies = QueryBuilder::for(Company::class)
->leftjoin('model_has_status', 'companies.id', 'model_has_status.company_id')
->leftjoin('statuses', 'model_has_status.status_id', 'statuses.id')
->allowedFilters([
AllowedFilter::custom('status', new FilterCompanyStatus()),
])
->where('model_has_status.status_id', function ($query) {
$query->select('status_id')
->from('model_has_status')
->whereColumn('company_id', 'companies.id')
->orderByDesc('created_at')
->limit(1);
})
->defaultSort('active_name')
->paginate(30);

最佳答案

感谢这些评论,我对数据库的内部工作原理进行了更多调查。我已经能够将查询结果从平均 1.8 秒优化到 0.05 秒!

查询调用了三个不同的表:

-Companies
*id
*active_name

-Model_has_status
*company_id
*status_id
*created_at

-Status
*id
*name

在原来的问题中,我只向companys.active_name添加了一个索引。这根本没有提高速度。然而,当我为所有提到的字段添加索引时,查询显着改善。

为了完整起见,我只是通过以下 Laravel 迁移来添加索引。

Schema::table('companies', function (Blueprint $table) {
$table->index('active_name');
});

Schema::table('model_has_status', function (Blueprint $table) {
$table->index('status_id');
$table->index('company_id');
$table->index('created_at');
});

Schema::table('statuses', function (Blueprint $table) {
$table->index('id');
});

关于mysql - 如何优化 MYSQL 查询缓慢的 Order By,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60777922/

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