所以假设我有两个表,一个(让我们称之为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
,两者(将)都有超过 100k+ 行。types