php - 只进行一次查询并将其存储在数组中或每次都进行查询是否更有效?

标签 php mysql arrays

我想知道哪种方法更有效,是只进行一次查询并将结果存储在一个数组中,然后使用 PHP 中的 in_array 函数检查该数组,还是每次需要检查值时都进行 MySQL 查询?

例如: 我创建了这个函数来将查询存储在一个数组中,因此这个查询只会进行一次。

 private function carregaPermissoes(){
        $query = mysql_query("SELECT permissao_nome FROM sisgrupopermissoes WHERE id_grupo = ".$this->getGid().";");
        if (mysql_num_rows($query) > 0){
            $array_permissoes = array();
            while ($row = mysql_fetch_array($query)){
                array_push($array_permissoes, $row["permissao_nome"]);
            }
            return $array_permissoes;
        }
    }

然后每次我需要检查它时我就使用这个函数:

public function checkPermissao($permissao){
        $this->setPermissao($permissao);
        if (in_array($this->getPermissao(), $this->getGrupoPermissao())){
            return true;
        }else{
            return false;
        }
    }

这是一个好方法吗?还是每次需要检查时都进行查询更好?

最佳答案

SQL 查询,通常是继查询之后最常见的瓶颈 网络。您的功能可以简化为:

public function checkPermissao($permissao)
{
    // The following line smells...
    $this->setPermissao($permissao);
    return in_array($this->getPermissao(), $this->getGrupoPermissao());
}

如果您担心 in_array (本质上使用顺序搜索)引入的开销,您可以 flip haystack 数组并使用 array_key_exists相反。

关于php - 只进行一次查询并将其存储在数组中或每次都进行查询是否更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55853686/

相关文章:

php - 有没有办法在 php 文件上使用 purgecss?

mysql - 如何为 MySQL 查询中的所有记录生成唯一的 UUID?

mysql - mysql 数据库中所有索引的大小

sql - 将选择查询的输出存储在 postgres 中的一个数组中

php - 我想要一个包含自定义参数的点赞按钮,我该怎么做?

php - 查询返回成功但没有更新行

php - 表单不会更新数据库

c++ - 如何检查数组是否等于某组值

php - 如何在 PHP 中访问嵌套标准对象数组中的数据

php - 如何在 Codeigniter 中创建多个 session