总结要点:使用 Laravel 开发工具,ORM 查询的 N + 1 问题

Laravel 开发者工具

  • laravel-debugbar

  • 安装

    composer require "barryvdh/laravel-debugbar:~3.1" --dev
  • 生成配置文件 config/debugbar.php

    php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
  • 配置启用条件

    // config/debugbar.php
    
    'enabled' => env('APP_DEBUG', false),

    数据库查询的 N + 1 问题

    N + 1 问题在 ORM 中普遍存在,常见于遍历操作中

    N + 1 怎么来

    假设需要现在需要查找模型 A 的 n 条数据,而模型 A 又关联了另外多个的模型,这里假设 A 关联了模型 B 和 C. 现在需要查找 n 条 A 的记录(这里需要 1 条 SQL 语句),同时把这 n 条记录关联的 B, C 记录也查出来(这里需要 n 条查询 B 的语句和 n 条查询 C 的语句),于是最后需要的 SQL 语句数目为 2n + 1.

    2n 抽象出来,假设需要查找的是 n 条 A 的记录(count(SQL) = 1),同时需要把与 A 关联的 k 个模型的记录也查找处理出来(count(SQL) = n * k), 设 n * k = N, 最后查询的 SQL 语句数目,即 N + 1

    Laravel 中解决 N + 1 问题

    • 使用预加载功能
    • 使用 with() 方法,会做缓存
      • with() 中放需要查询的关联属性
本帖已被设为精华帖!
本帖由系统于 8个月前 自动加精
bignose
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2

总结 是个好习惯啊

6个月前 评论

总结的真是好。

2个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会