Codeigniter Active Record与常规Mysql查询

时间:2017-04-16 07:08:16

标签: mysql codeigniter activerecord

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

由于

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

示例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确实需要更多输入。如果查询很容易用简单的字符串表示,为什么会这样呢?

另一方面,在可能有条件地要求不同查询语句的情况下(即不同的字段集,附加或不同的"其中"条件,备用排序顺序等)然后有效记录可以让您的生活更轻松。例如。

$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();

不可否认,上述示例可以通过有条件地连接字符串来轻松地重新创建。但是更复杂的情况很容易存在。