【问题标题】:Codeigniter Active Record vs Regular Mysql QueryCodeigniter Active Record 与常规 Mysql 查询
【发布时间】:2017-04-16 07:08:16
【问题描述】:

常规 MYSQL 查询是否比 Codeigniter 活动记录查询更快?在某些地方我读到活动记录查询会占用内存来执行查询,但通常不会。

谢谢

【问题讨论】:

    标签: mysql codeigniter activerecord


    【解决方案1】:

    Activerecord 使用常规的 sql 查询来执行您希望它执行的任何活动。显然,如果您使用 activerecord 来代表您组装查询,那么它可能会选择一种效率较低的方式来执行此操作。

    这是针对所有当前 ORM 的标准。

    但是,作为原始 sql 并通过 activerecord 发出的相同查询即使在内存方面也会产生相同的性能影响。

    【讨论】:

      【解决方案2】:

      如果您的问题是,“在以下示例中,第二个示例是否需要显着更多内存?”。

      示例 1:

      $query = $this->db->query("SELECT `id`,`somefield` FROM `some_table` WHERE `id` = $id Order by `somefield` DESC");
      

      示例 2:

      $query = $this->db
                ->select('id, somefield')
                ->from('some_table')
                ->where('id, $id)
                ->order_by('somefield', 'DESC');
                ->get();
      

      答案是内存差异不显着。有一些额外的内存,但从整体上看,并不多。

      Active Record(自 CI v3 起更名为 Query Builder)的目的是构建查询语句字符串。 Active Record 示例将执行更多代码来组装第一个示例中定义的相同语句。在它构造语句之后,它实际上进行了与第一个示例完全相同的调用。

      如果正在加载 Active Record 类(由数据库配置设置确定),那么无论您是否使用它,都会分配内存来保存该代码。

      使用 Active Record 确实需要更多的输入。如果查询很容易用简单的字符串说明,为什么要这样做?

      另一方面,在可能有条件地需要不同查询语句的情况下(即不同的字段集、附加或不同的“where”条件、备用排序顺序等),那么 Active Record 可以让您的生活变得更美好容易得多。例如。

      $this->db
          ->select('id, somefield')
          ->from('some_table')
          ->where('id, $id);
      
      if($need_another_where)
      {
          $this->db->where('other_field', $other);
      }
      
      if($reverse_sort)
      {
          $this->db->order_by('somefield', 'DESC');
      }
      else
      {
          $this->db->order_by('somefield', 'ASC');
      }
      
      $query = $this->db->get();
      

      诚然,上面的例子可以很容易地通过有条件地连接一个字符串来重新创建。但更复杂的情况很容易存在。

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 1970-01-01
        • 2017-03-30
        • 2012-04-17
        • 2013-02-22
        • 1970-01-01
        • 1970-01-01
        • 2016-03-15
        • 1970-01-01
        相关资源
        最近更新 更多