当前位置: 首页 > 面试题库 >

Laravel Eloquent vs查询构建器-为什么使用eloquent降低性能

贺正祥
2023-03-14
问题内容

已关闭 。这个问题需要更加集中。它当前不接受答案。

想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。

6个月前关闭。

我在Laravel查询生成器和雄辩者之间进行了一些性能测试。使用各种sql语句(select-update-delete-
insert),查询生成器要快得多。

所以我的问题是:为什么有人对普通查询生成器使用Laravel Eloquent?


问题答案:

雄辩的是Laravel的Active Record模式的实现,它具有所有优点和缺点。

Active Record是用于以CRUD方式处理单个实体的好解决方案-即创建具有填充属性的新实体,然后将其保存到数据库,从数据库加载记录或删除。

您将从Eloquent的功能中受益匪浅,例如脏检查(仅针对已更改的字段发送SQL
UPDATE),模型事件(例如,在有人创建新帐户时发送管理警报或更新统计信息计数器),特征(时间戳,软删除,自定义特征)急切/延迟加载等。您还可以应用域驱动模式并在Active
Record实体中实现一些业务逻辑,例如验证,管理关系,计算等。

但是,正如您已经知道的那样,Active Record附带了一些性能价格。

当您处理一条记录或几条记录时,无需担心。但是对于读取大量记录的情况(例如,用于数据网格,用于报告,用于批处理等),普通的Laravel
DB方法是更好的方法。

对于基于Laravel的应用程序,我们认为合适的是同时使用两种方法。我们使用Laravel的Eloquent for
UI表单来处理一条记录,并使用DB方法(由SQL视图支持,并进行了其他数据库引擎特定的性能调整)来检索UI表,导出任务等的数据。它还与RESTful
API配合使用-Eloquent for GET ,PUT,POST,DELETE(带键),DB而GET(不带键)但具有过滤器,排序和分页。



 类似资料:
  • 我正在使用一个嵌入式数据源(ApacheCommonsDBCP1.3),JDBC3DB2JCC,进行Spring批处理。用于BD2数据库和JDK1的jar。5.我知道DBCP2。x已经发布,但由于现有系统(JDK1.5),我现在无法升级。 数据库配置: 我注意到,如果将validationQuery属性与testOnBorrow、testOnReturn和testWhileIdle一起使用,则完成

  • 我对BigQuery中的集群表(带有日期分区)有一个问题。我有一个由名为entity_id的列集群的表。问题是,我希望在进行由这些集群列过滤的查询时看到字节读取减少,但根据BigQuery Web UI,它无论如何都在进行全扫描。 例如:<br>从<code>project.usersDataset中选择*。users_cluster其中entity_id='405849241'限制为1000 返

  • 根据AWS文档,我正在使用dynamo db分页: -- -- 令人惊讶的是,当我不设置任何页面大小(1)时,DynamoDb查询速度明显更快,根据文档,情况应该不是这样。我假设dynamo db在默认情况下返回所有结果,如果我们不指定pageSize。

  • 问题内容: 我有以下口才的查询(这是查询的简化版本,其中包含更多s和s,因此是实现此目的的明显回旋方式-该理论很重要): 如您所见,我最早的约会发生在我的约会上或之后。这导致运行单独的查询来获取该日期,然后将该日期用作主查询中的参数。有没有一种雄辩的方法可以将查询嵌入在一起形成一个子查询,因此只有1个数据库调用而不是2个? 编辑: 根据@Jarek的答案,这是我的查询: 这些块使查询中的所有参数突

  • 查询构建器建立在 Database Access Objects 基础之上,可让你创建 程序化的、DBMS无关的SQL语句。相比于原生的SQL语句,查询构建器可以帮你 写出可读性更强的SQL相关的代码,并生成安全性更强的SQL语句。 使用查询构建器通常包含以下两个步骤: 创建一个 yii\db\Query 对象来代表一条 SELECT SQL 语句的不同子句(例如 SELECT, FROM)。 执

  • 问题内容: 从MDN文档获取标准功能以及非标准属性 强烈建议不要更改对象的[[Prototype]],因为它非常慢且不可避免地会减慢现代JavaScript实现中的后续执行,无论如何实现。 使用添加属性是 在 添加成员函数JavaScript类的方式。然后如下图所示: 为什么不好?如果它的坏处不那么坏? 那么为什么会这样警告:它非常慢并且不可避免地会减慢现代JavaScript实现中的后续执行 。