更大更大更少或更小更多疑问?

时间:2013-04-09 11:20:35

标签: php mysql join

所以假设我有两个表,一个(让我们称之为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
    }

注意:persontypes两个(将)有超过100k +行,我们期待。

1 个答案:

答案 0 :(得分:1)

连接方法(选项3)当然应该是最有效的 - 其他两种方法基本上是重新发明数据库首先设计的处理,所有相关数据必须先发送到Web服务器才能完成!