总结要点:使用 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() 中放需要查询的关联属性
本帖已被设为精华帖!
本帖由系统于 5年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

总结 是个好习惯啊

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!