【发布时间】:2017-04-16 07:08:16
【问题描述】:
常规 MYSQL 查询是否比 Codeigniter 活动记录查询更快?在某些地方我读到活动记录查询会占用内存来执行查询,但通常不会。
谢谢
【问题讨论】:
标签: mysql codeigniter activerecord
常规 MYSQL 查询是否比 Codeigniter 活动记录查询更快?在某些地方我读到活动记录查询会占用内存来执行查询,但通常不会。
谢谢
【问题讨论】:
标签: mysql codeigniter activerecord
Activerecord 使用常规的 sql 查询来执行您希望它执行的任何活动。显然,如果您使用 activerecord 来代表您组装查询,那么它可能会选择一种效率较低的方式来执行此操作。
这是针对所有当前 ORM 的标准。
但是,作为原始 sql 并通过 activerecord 发出的相同查询即使在内存方面也会产生相同的性能影响。
【讨论】:
如果您的问题是,“在以下示例中,第二个示例是否需要显着更多内存?”。
示例 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();
诚然,上面的例子可以很容易地通过有条件地连接一个字符串来重新创建。但更复杂的情况很容易存在。
【讨论】: