查找表,存储在MySQL或PHP中

时间:2011-02-19 16:53:54

标签: php mysql performance lookup

我对存储在MySQL(独立表)或PHP(数组)中的查找表之间的性能有疑问,所以这是我的数据(以数组形式)

$users = array(
array(name => 'a', address => 'abc', age => '14'),
array(name => 'b', address => 'def', age => '12'),
array(name => 'c', address => 'ghi', age => '13'),
array(name => 'd', address => 'jkl', age => '14'),
array(name => 'd', address => 'mno', age => '11'),
);

这是Facebook平台上的游戏,可能有很多人同时访问的机会。

实际上,表应该有~100行,但是所有数据都是静态的,如果所有数据都存储在MySQL中,我可以轻松做任何“选择”,考虑对MySQL进行太多查询,因此我考虑存储在php数组中但是,我不知道如何在特定条件下选择行(我知道它应该有其他方法而不是循环),就像选择所有age = 14 in到另一个数组一样。

那么,哪一个有更好的表现? (MySQL或PHP查找表?)

2 个答案:

答案 0 :(得分:3)

如果您知道:

  • 数据永远是静态的
  • 你只有100行
  • 您将只在查询中使用简单的单字段匹配
  • 您永远不需要像联接这样的高级功能
  • 你将获得高流量

...然后我肯定把逻辑放在纯PHP中。 “删除不必要的数据库查询”始终是提高性能的第一步,并且将这些简单的行丢弃到MySQL中,除了你不想写一个简单的foreach循环之外没有其他原因这是一个坏主意,我认为。这太过分了。如果你正在使用像APC这样的操作码缓存(你是谁,对吗?)那么我认为性能比较甚至不会接近。 (虽然我总是建议你自己对它们进行基准测试以确定。)

class Users
{

    protected $_users = array(
        array('name' => 'a', 'address' => 'abc', 'age' => '14'),
        array('name' => 'b', 'address' => 'def', 'age' => '12'),
        array('name' => 'c', 'address' => 'ghi', 'age' => '13'),
        array('name' => 'd', 'address' => 'jkl', 'age' => '14'),
        array('name' => 'e', 'address' => 'mno', 'age' => '11')
    );

    public function select($field, $value)
    {
        $list = array();
        foreach ($this->_users as $user) {
            if ($user[$field] == $value) {
                $list[] = $user;
            }
        }
        return $list;
    }

}

$users = new Users();
$list = $users->select('age', 14);

答案 1 :(得分:2)

PHP在性能方面肯定会更快。但是查询将很难维护代码。由于网络原因,在mysql中保存数据将是一个开销。但您可以通过使用MyIASM表并使用服务器端缓存的查询来优化它。

我的投票是针对启用了查询缓存的MySql上的MyIASM表。