所以假设我有两个表,一个(让我们称之为person
)有一个名为type
的字段,它存储了一个链接到另一个表的整数(让我们称之为types
一个名为id
的字段。什么会提高性能?
一个较大的查询,存储所有类型的值,然后在person
表上循环,并从我们从types
查询中获取的数组中获取值。
在person
的每个循环中抓取types
使用JOIN
查询将type
加入person
查询。
注意:在示例中我使用了一些假变量,例如$db
(显然)。只需将它们想象成CodeIgniter数据库类或其他东西......
BP#1的示例代码:
<?php
$types = $this->db->query("SELECT * FROM `types`")->result_array();
$query = $this->db->query("SELECT * FROM `person`");
foreach($query->result_array() as $value)
{
$type = $types[$value['type']];
}
BP#2的示例代码:(编辑为添加缓存形式)
<?php
$query = $this->db->query("SELECT * FROM person");
$types = [];
foreach($query->result_array() as $value)
{
if(empty($types[$value['type']]))
{
$types[$value['type']] = $this->db->query("SELECT * FROM types WHERE id = {$value['type']} LIMIT 1")->row_array();
}
$type = $types[$value['type']];
}
BP#3的示例代码:(注意:我根本没有使用JOIN
所以请原谅查询中的任何错误,并随时修复它...)
<?php
$query = $this->db->query("SELECT * FROM person JOIN types ON person.type = types.id");
foreach($query->result_array() as $value)
{
// type is already there for us in $value
}
注意:person
和types
两个(将)有超过100k +行,我们期待。
答案 0 :(得分:1)
连接方法(选项3)当然应该是最有效的 - 其他两种方法基本上是重新发明数据库首先设计的处理,和所有相关数据必须先发送到Web服务器才能完成!