Laravel 雄辩的 withCount() 应该比 with() 慢

2024-05-09

所以我问这个的原因是在我当前的应用程序中withCount()与仅通过以下方式获取关系的所有数据相比,响应时间几乎增加了三倍with()并只是从前端获取长度(javascript)。我认为使用的要点withCount()是为了加快查询速度,但也许我错了?

例如:

courseSession::where('id', '>=', 1)
->where('id', '<=', 320)
->withCount('enrollments')
->get();

平均响应时间约为 900 毫秒(调试栏将其显示为单个数据库调用)

but

courseSession::where('id', '>=', 1)
->where('id', '<=', 320)
->with('enrollments')
->get();

大约 350 毫秒(调试栏将其显示为两个不同的数据库调用)

模型关系定义如下:

public function enrollments()
{
   return $this->hasMany(EmployeeEnrollment::class)->where('dropped', '=', null);
}

NOTE:已经检查过,如果我删除 where 子句,它只会加速 30 毫秒

员工登记表大约有 11k 行,我正在运行查询的模型的表大约有 2k 行

这也在本地开发环境中并在两台单独的机器上进行了测试

我对数据库的东西有点一无所知,所以我不确定我是否做错了什么......但对此的任何帮助将不胜感激


不同之处在于你要求 mysql 计算语句中的每一行而不是仅仅转储。 withCount 的重点不在于它更快,而是如果您只需要计数的话,它会更好地占用内存。

例如,我与数千个数据丰富的项目有关系。如果我只是使用 with 然后尝试计算结果,php 将耗尽内存我有机会进行计数。如果我使用 withCount,则只会返回一项,告诉我有多少项,因此不会对 php 内存产生任何影响,但所有工作都在 sql 服务器上完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 雄辩的 withCount() 应该比 with() 慢 的相关文章

随机推荐

  • 从 SQL Server 2008 的 .mdf 和 .ldf 文件恢复数据库

    由于某种原因 我必须卸载 SQL Server 2008 R2 但在此之前我复制了两个文件 mdf and ldf 我的数据库来自 C Program Files x86 Microsoft SQL Server MSSQL10 50 MS
  • 如何使用 jira-python 设置 fixVersions 字段

    我正在尝试使用 jira python 模块 http jira python readthedocs org en latest 更新现有的 JIRA 具体来说 我正在尝试设置问题的fixesVersion 列表 我已经尝试了一段时间但没
  • 序列化和反序列化 Visual Studio 解决方案文件 - 或以编程方式编辑?

    我想以编程方式添加和删除项目 解决方案文件夹和其他项目 例如解决方案的资源文件 但我不确定最好的方法是什么 对于那些不知道的人 高度简化 解决方案文件 sln 通常如下所示 Microsoft Visual Studio Solution
  • 使用 google.protobuf.Timestamp 在 Go 中解析带有时区偏移的日期时间戳

    我正在创建一个将使用 GRPC 和 protobuf 的 Go 应用程序 我的 RPC 服务应获取包含类型的消息google protobuf Timestamp 解析它并最终将其保存在数据库中或对其执行更多操作 我对什么被认为是该类型的有
  • Coredata错误setObjectForKey:对象不能为nil

    我正在尝试检查我的核心数据存储中是否有任何数据作为我的应用程序的恢复类型 基本上 如果用户处于最终视图 则 coredata 中会有一些数据不断更新 因此 他们处于最终视图中 然后应用程序崩溃 或者他们将其置于睡眠状态 然后应用程序从内存中
  • 如何使用flyway将数据从一个DB迁移到另一个DB?

    我在不同的服务器上有两个 postgreSql DB 比如说 A 和 B 我可以使用 Flyway 一些如何将所有数据从 DB A 复制到新设置且为空的 B 如果有人指出我正确的方向和工具 这将很有帮助 要求是通过某种工具自动化将数据从一个
  • 如何在动作脚本 3 中设置/访问外部 swf 文件的动态文本字段?

    我正在处理一个 fla 文件 其中添加了一个 swf 文件 我如何在该 swf 文件的动态文本上设置文本 有没有直接设置文本的方法 我不想在 url 中作为参数传递 我试过这样 var rq URLRequest new URLReques
  • 部署在 Azure 中时在 EF 迁移中使用更新数据库

    上下文 我在 Azure 中部署了 ASP NET MVC4 解决方案 我的 MSSQL Server 数据库也在 Azure 中 我目前的部署方式是这样的 在 web config 中 我将连接字符串从本地数据库 sdf 更改为 azur
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 任何人都知道 JQuery 插件可以生成类似于 geni.com 上的树形菜单

    大家好 我花了几个小时寻找一个 Jquery 插件来生成像 geni com 上那样的树形菜单模块 如果有人知道 Jquery 中的这样的插件或脚本 请让我知道或指导我如何使用 Jquery 开发这样的功能 请检查我正在寻找什么http w
  • 如何返回每个另一个节点属性的最大计数

    我需要计算一位作曲家的音乐作品每十年被演奏了多少次 然后只返回每十年演奏次数最多的一首作品 除了过滤除每十年最高计数之外的所有内容之外 该密码可以执行所有操作 match c Composer CREATED BY w Work lt 2
  • 我可以在导航组件中使用多个 NavHostFragment 吗?

    如果您难以理解以下段落 请查看我制作的流程图 我目前正在制作一个带有 3 个顶级目的地的笔记应用程序 顶级目标之一 NotesList 显示用户创建的注释列表 NotesList 有一个过滤器按钮 可显示带有 FilterMenu 目标的底
  • Google Cloud Kubernetes 上任务队列的替代方案

    我发现任务队列主要用于App Engine标准环境 我正在将现有服务从 App Engine 迁移到 Kubernetes 任务队列的一个好的替代方案是什么 推送队列是当前正在使用的队列 我在线阅读文档并浏览了此链接 何时使用 PubSub
  • serde/bincode 如何序列化字节数组?

    这段代码完全按照我的要求序列化了一个 32 字节的数组 derive Debug Clone Serialize Deserialize PartialEq Eq PartialOrd Ord struct Hash u8 32 let h
  • 如何使 WordPress 中的自定义模板充当受密码保护的页面?

    我正在使用自定义模板构建一个页面 问题是 我需要此页面受密码保护 或者至少可供登录用户访问 但即使我在 WordPress 管理的新页面部分中将其设置为此类 私人 密码保护 它也不会显示菜单项和内容 如果是私有的 或者它会立即显示页面内容
  • 如何在jquery中创建一个全局函数,并从另一个加载的页面调用它

    如何在 jquery 中声明全局函数 如何从使用 jquery 的 load 函数加载到该页面上的某个 div 中的页面调用它 该功能很简单第 1 个子页面 main links 1st sub page myfun function is
  • 合并字符数组中的最小重复次数

    假设我有两个数组 我想合并它们 以便合并后的数组具有最小重复次数 例如 x x 是重复 arr1 x d d m f m arr2 d d x f f m 唯一的条件是在合并数组中 元素来自arr1 and arr2必须出现在各自的订单中a
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • 为什么 Excel 有时会在工作表名称中添加 $?

    我有时但并非总是发现 Excel 会放置一个 位于工作表名称末尾 但在 Excel 中看不到 只有在尝试使用 C 将其导入 SQL Server 时才可见 我遇到过很多不同的情况 它保留了原始工作表 但也创建了第二个空的 隐藏 工作表 其中
  • Laravel 雄辩的 withCount() 应该比 with() 慢

    所以我问这个的原因是在我当前的应用程序中withCount 与仅通过以下方式获取关系的所有数据相比 响应时间几乎增加了三倍with 并只是从前端获取长度 javascript 我认为使用的要点withCount 是为了加快查询速度 但也许我