0

所以假设我有两个表,一个(让我们称之为person)有一个名为的字段type,它存储了一个链接到另一个表的整数(让我们types用一个名为的字段来调用它id。什么会提高性能?

  • 一个更大的查询存储所有类型的值,然后遍历person表并从我们从types查询中获得的数组中获取一个值。

  • 在每个循环中person获取一个值types

  • 使用JOIN查询将 加入typeperson查询中。

注意:在示例中,我使用了一些假变量,例如$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

4

1 回答 1

1

连接方法(选项 3)当然应该是最有效的 - 其他两种方法本质上是重新发明数据库最初设计的处理,并且所有相关数据都必须发送到 Web 服务器在它可以完成之前!

于 2013-04-09T11:27:13.030 回答