Mysql 李>

Mysql 李>,mysql,sql,performance,laravel,laravel-5,Mysql,Sql,Performance,Laravel,Laravel 5,您可以使用(用于检查雄辩/数据库查询性能/执行时间的流行包)检查查询性能 现在是你的选择。你想做什么 您可以在这里查看完整的代码与性能、内存消耗和代码质量的比较-当涉及到性能和应用程序增长时,为了进行比较,请查看下表: 雄辩的ORM和原始SQL之间选择操作平均响应时间的比较 雄辩ORM平均响应时间 原始SQL平均响应时间 雄辩的ORM最适合处理特定表中较少的数据。另一方面,无论是在一个表中还是在多个表中,查询生成器处理大量数据所需的时间都少于雄辩的ORM 在我的例子中,我在一个包含少于1750

您可以使用(用于检查雄辩/数据库查询性能/执行时间的流行包)检查查询性能

现在是你的选择。你想做什么


您可以在这里查看完整的代码与性能、内存消耗和代码质量的比较-

当涉及到性能和应用程序增长时,为了进行比较,请查看下表:

雄辩的ORM和原始SQL之间选择操作平均响应时间的比较

雄辩ORM平均响应时间
原始SQL平均响应时间

雄辩的ORM最适合处理特定表中较少的数据。另一方面,无论是在一个表中还是在多个表中,查询生成器处理大量数据所需的时间都少于雄辩的ORM

在我的例子中,我在一个包含少于17500个条目的表的应用程序中使用了雄辩的ORM。每当我预计表将容纳17500多个条目时,查询生成器是最好的


此外,在具有子查询的应用程序中,我更喜欢查询生成器而不是雄辩的ORM。

它们之间有许多不同之处

  • 生成器查询比通过调试器测试它要快得多。 以下是您如何进行测试的方法
  • 当您处理大量数据(如 如果您的数据库中有超过10万个ORM
  • 生成器查询最适合于大量数据。Orm最适合于 使用关系工作,因为它提供了许多关系方法 定义表之间的关系
  • 生成器查询使用sql的联接,但orm使用关系处理两个或更多表

  • 不要比较苹果和桔子。雄辩是一种ORM,它意味着可以自动为您处理模型之间的关系。您可以检索相关模型,而无需编写复杂的查询。您甚至可以检索数据库信息,而无需任何数据库知识。同样雄辩的还有查询生成器所缺乏的大量额外功能,如可读性、访问器、变异器、JSON/数组转换、隐藏敏感属性、自动时隙、自动属性转换、SOFDelete等。苹果生产苹果汁,橙子生产橙汁。但不幸的是,
    雄辩的
    查询生成器
    都从
    数据库
    生成了相同的数据。也许这就是他比较这两个的原因。@JaviStolz如果你说“不懂SQL”,你是对的。但是“您甚至可以在没有任何数据库知识的情况下检索数据库信息”是不可能的。Eloquent要求您了解数据库的结构、外键是什么、它们是如何工作的,以及如何导航该结构。只有最简单的查询不需要数据库知识,而且大多数应用程序都需要高度复杂的查询。虽然苹果可以制成苹果汁,橙子可以制成橙汁,但它们都是果汁。Eloquent返回集合,集合是封装在helpers中的数据,使业务逻辑更具可读性。查询生成器是雄辩者使用的一部分。Eloquent是业务逻辑范例中的一个组件,它允许您使用闭包在流程的每个部分进行调整和过滤数据,因此您的东西在决策树下运行时读取
    $object->filter($something\u we\u just\u calculated)
    。你可以想象像JQueryDoes一样的雄辩的即时加载并不能解决性能问题吗?@Christophvh有时候即时加载可以帮上一点忙,但它仍然是同一个雄辩的(活动记录)对象,所有的“重东西”。Laravel提供了一些关于雄辩模型的方便方法,使SQL查询和检索的对象更轻,但这不再是纯粹的雄辩,而是某种雄辩/QueryBuilder的混合。雄辩非常适合在单个模型上进行常规CRUD操作或在处理少量记录时进行简单联接,但是,一旦您开始进入复杂的连接,并在事务中处理成百上千条记录,查询生成器方法的性能就会更好;如果有什么区别的话,原始SQL是最有效的选择,因为它是一个直接查询。我仍然同意这个答案,因为现在我面临着同样的问题,从eloquent加载(选择)不同的检查/规则是一件痛苦的事,但是如果我们不从一开始就计划使用DB query,那么将所有这些都转移到查询生成器也是一个很大的挑战,用雄辩做什么,希望别人知道this@Adam在一些类似ERP的商业网站中,客户希望使用每页100条记录的大网格,通常所有这些记录基本上都是只读视图,通常基于高效的微调SQL视图。因此,这里真的不需要大量雄辩的模型,除非您想花一些时间为实体的只读版本创建单独的雄辩模型。对于大型数据网格,创建一个SQL视图来解析所有连接等,并将记录作为简单的平面映射返回(可由Laravel的DB机制处理),“当我们处理大量记录时”应该是“当我们使用大量连接和雄辩者不支持的功能时”。当雄辩者无法快速加载时,会导致巨大的性能损失。复杂的聚合和多列的连接目前难以令人信服。如果你有一百万条记录,而你所做的只是从一个表中选择一些记录,那么Elount将产生与DBQuery甚至直接PDO相同的SQL和性能;使用Mysql视图并为其创建控制器/模型。这些比较适用于极端情况,这些查询构建了1000个(如果不是10000个)雄辩的ORM模型,其中只有在真实世界中才会出现批量数据处理,这也解释了为什么它的速度较慢。但在绝大多数情况下,这是针对<100个条目的基本crud(假设您正确限制查询),并且它将是一个t
    // In Eloquent
    $student = App\Student::find($id);
    
    // In DB facade
    $student = DB::table('student')->where('id', $id)->first();
    
    Joins | Average (ms) 
    ------+-------------
    1     | 162,2 
    3     | 1002,7 
    4     | 1540,0 
    
    Result of select operation average response time for Eloquent ORM 
    
    Joins | Average (ms) 
    ------+-------------
    1     | 116,4 
    3     | 130,6 
    4     | 155,2 
    
    Result of select operation average response time for Raw SQL