-1

我通常会尝试在我的项目中减少 MySQL 查询,然后使用 PHP 格式化数据。

我想知道更多的 MySQL 查询是否会更好,这些查询可以为我提供正确格式的确切数据,或者是否更好地在单个查询中获取我需要的所有内容,然后使用 PHP 解析结果以获得我需要的数组。

4

2 回答 2

3

在现代 PHP 中,封装是编写代码时的要点之一,如果您明确不调用执行工作的方法,则不会执行一堆查询。

对于一些旧的程序风格,您可以在一页中进行 100 个查询并使用 is..() 函数进行测试,使用哪个查询,由于运行时编译,您的引擎将有很高的负载。

因此,您可以在大量查询中为自己提供尽可能多的条件,并使用更少的 PHP 来测试它。

让我们举个小例子。

假设您有一个模型,用于名为“Article”的项目。您希望通过 id、作者或姓名进行搜索。有这个没有错:

public function getArticleById($id) {
    $sql = "SELECT id, name, author FROM article WHERE id = $id";
    $query = $this->db->query($sql);
    $result = $this->db->fetch($query);

    return $result; //assuming you have query and fetch method, where the last one return an array/object
}

public function getArticleByName($name) {
    $sql = "SELECT id, name, author FROM article WHERE name = $name";
    $query = $this->db->query($sql);
    $result = $this->db->fetch($query);

    return $result;
}

public function getArticleByAuthor($author) {
    $sql = "SELECT id, name, author FROM article WHERE author = $author";
    $query = $this->db->query($sql);
    $result = $this->db->fetch($query);

    return $result;
}

取决于你想要什么,你可以使用这些方法之一。我通常假设,您可以在多个页面中重用这些方法返回的信息,因为它返回例如单个文章所需的全部信息。另一方面,我假设您使用了一些不好的做法,例如,如果article有一个DateTime字段,并且您在 3 个不同格式的页面中使用它 - 那么您每次使用时都需要 PHP 重新格式化日期时间该方法返回信息,如果您有 3 个查询,它会返回不同格式的日期时间,这将是完全矫枉过正的。

此外,总的过度杀伤是请求整个表,并使用 PHP 过滤信息,而不是WHERE

public function getArticle() {
        $sql = "SELECT id, name, author FROM article";
        $query = $this->db->query($sql);
        $result = $this->db->fetch($query);

        return $result; 
    }

//...

foreach ($model->getArticle() as $article) {
    if ($article['name'] == $name) {
        //...
    }

谈论性能是主观的事情,查询数据库的方式和频率真的很重要,因此以给定方式格式化数据的单个查询被重复使用足够频繁,你不会加载你的核心。

于 2013-09-05T10:13:22.403 回答
2

根据经验..

通常,我遵循的规则是尽量减少您对某种持久结构(如数据库)发出的请求数量。数据库请求非常快,但让语言在内存中操作结构通常更快。这还取决于您的 DBMS 有多忙。有其他人从这张桌子上请求吗?只有你吗?永远只有你在使用它吗

如果你想..

您可以进行一些基准测试,并简单地计算两个线程完成所需的时间。一个具有多个 MySQL 查询;一个与单个 MySQL 查询。如果您看到明显且一致的差异,那么您就有了答案!

于 2013-09-05T09:44:15.547 回答