性能,MySQL单查询+ PHP还是多查询?

时间:2013-09-05 09:41:03

标签: php mysql

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

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

2 个答案:

答案 0 :(得分:3)

在现代PHP中,封装是编写代码时的主要观点之一,如果你明确地不调用那些完成工作的方法,那么就不会执行一堆查询。

针对某些旧程序样式,您可以在一个页面中使用is ..()函数进行100次查询和测试,使用哪种查询,由于运行时编译,您的引擎会有很高的负载。

因此,您可以在很多查询中为自己提供尽可能多的条件,而不需要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;
}

取决于您的需求,您可以使用以下方法之一。我通常认为,您可以在多个页面中重用这些方法返回的信息,因为它会返回单个文章所需的全部信息。另一方面,我会假设您使用了一些不良做法,例如,如果articleDateTime字段,并且您在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) {
        //...
    }

谈论性能是主观的,关于查询数据库的方式和频率非常重要,因此以给定方式格式化数据的单个查询经常被重用,您将无法加载核心。

答案 1 :(得分:2)

根据经验......

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

如果你想......

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