Laravel框架explain查询计划分析功能如何使用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1048个文字,预计阅读时间需要5分钟。
如果在Laravel应用中发现数据库查询响应缓慢,但不确定是否是因为索引未生效导致的,可以通过以下步骤直接查看MySQL执行计划来确认实际的执行路径:
一、在查询构建器中调用 explain() 方法
该方法将原 SQL 查询前缀加上 EXPLAIN 关键字,并返回数据库返回的执行计划数组,便于开发者即时判断 type、key、rows 和 Extra 等关键字段是否符合预期。
1、在控制器或服务类中构造目标查询,例如:DB::table('users')->where('email', 'test@example.com')。
2、在链式调用末尾添加 ->explain(),如:->explain()->get()。
3、执行后将获得一个包含 10+ 字段的关联数组,重点关注 type 字段是否为 ref/const/range 而非 ALL,以及 key 字段是否显示已使用的索引名。
二、通过 DB::select() 手动执行 EXPLAIN 原生语句
当需要绕过 Query Builder 封装、验证特定 SQL 的执行计划,或调试带子查询、UNION 的复杂语句时,可直接拼接 EXPLAIN 后执行原生查询。
本文共计1048个文字,预计阅读时间需要5分钟。
如果在Laravel应用中发现数据库查询响应缓慢,但不确定是否是因为索引未生效导致的,可以通过以下步骤直接查看MySQL执行计划来确认实际的执行路径:
一、在查询构建器中调用 explain() 方法
该方法将原 SQL 查询前缀加上 EXPLAIN 关键字,并返回数据库返回的执行计划数组,便于开发者即时判断 type、key、rows 和 Extra 等关键字段是否符合预期。
1、在控制器或服务类中构造目标查询,例如:DB::table('users')->where('email', 'test@example.com')。
2、在链式调用末尾添加 ->explain(),如:->explain()->get()。
3、执行后将获得一个包含 10+ 字段的关联数组,重点关注 type 字段是否为 ref/const/range 而非 ALL,以及 key 字段是否显示已使用的索引名。
二、通过 DB::select() 手动执行 EXPLAIN 原生语句
当需要绕过 Query Builder 封装、验证特定 SQL 的执行计划,或调试带子查询、UNION 的复杂语句时,可直接拼接 EXPLAIN 后执行原生查询。

