PHP/MySQL性能问题

PHP/MySQL性能问题,php,mysql,performance,oop,Php,Mysql,Performance,Oop,我有一个简短的问题要问你们这些了解性能的人。我创建了一个“MySQL”类,每次执行查询时,我都会创建一个新的MySQL对象。见下文 public function get_am_sales() { $mysql = new MySQL(); $mysql->connect(); $query = "some query"; $mysql->query($query); $result = $mys

我有一个简短的问题要问你们这些了解性能的人。我创建了一个“MySQL”类,每次执行查询时,我都会创建一个新的MySQL对象。见下文

    public function get_am_sales() {
        $mysql = new MySQL();
        $mysql->connect();
        $query = "some query";
        $mysql->query($query);
        $result = $mysql->return_assoc();
        unset($mysql);
        return $result;
    }

    public function get_pm_sales() {
        $mysql = new MySQL();
        $mysql->connect();
        $query = "some query";
        $mysql->query($query);
        $result = $mysql->return_assoc();
        unset($mysql);
        return $result;
    }

    public function get_comp_sales() {
        $mysql = new MySQL();
        $mysql->connect();
        $query = "some query";
        $mysql->query($query);
        $result = $mysql->return_assoc();
        unset($mysql);
        return $result;
    }

$sales = new Sales();
$amSales = $sales->get_am_sales();
$pmSales = $sales->get_pm_sales();
$compSales = $sales->get_comp_sales();
    public function connect() {
        $this->mysql = new MySQL();
        $this->mysql->connect();
    }

    public function get_am_sales() {
        $query = "SELECT site_id, dly_sls AS am_sales, cov_cnt AS am_covers
                  FROM v_sales_yesterday
                  WHERE am_pm = 'AM'
                  GROUP BY site_id
                  ORDER BY site_id ASC";
        $this->mysql->query($query);
        $result = $this->mysql->return_assoc();
        return $result;
    }

    public function get_pm_sales() {
        $query = "SELECT site_id, dly_sls AS pm_sales, cov_cnt AS pm_covers
                  FROM v_sales_today
                  WHERE am_pm = 'PM'
                  GROUP BY site_id
                  ORDER BY site_id ASC";
        $this->mysql->query($query);
        $result = $this->mysql->return_assoc();
        return $result;
    }

    public function get_comp_sales() {
        $query = "SELECT business_date, site_id, dly_sls AS comp_sales
                  FROM v_sales_today_comp 
                  WHERE am_pm = 'PM'
                  GROUP BY site_id
                  ORDER BY site_id ASC";
        $this->mysql->query($query);
        $result = $this->mysql->return_assoc();
        return $result;
    }

    public function disconnect() {
        unset($this->mysql);
    }

$sales = new Sales();
$sales->connect();
$amSales = $sales->get_am_sales();
$pmSales = $sales->get_pm_sales();
$compSales = $sales->get_comp_sales();
$sales->disconnect();
上面的代码显然是有效的,但我想知道这是否是一个性能上的打击,因为我打开和关闭了与每个函数调用的连接。我曾尝试使用一个连接实现该类,但出现了错误。见下文

    public function get_am_sales() {
        $mysql = new MySQL();
        $mysql->connect();
        $query = "some query";
        $mysql->query($query);
        $result = $mysql->return_assoc();
        unset($mysql);
        return $result;
    }

    public function get_pm_sales() {
        $mysql = new MySQL();
        $mysql->connect();
        $query = "some query";
        $mysql->query($query);
        $result = $mysql->return_assoc();
        unset($mysql);
        return $result;
    }

    public function get_comp_sales() {
        $mysql = new MySQL();
        $mysql->connect();
        $query = "some query";
        $mysql->query($query);
        $result = $mysql->return_assoc();
        unset($mysql);
        return $result;
    }

$sales = new Sales();
$amSales = $sales->get_am_sales();
$pmSales = $sales->get_pm_sales();
$compSales = $sales->get_comp_sales();
    public function connect() {
        $this->mysql = new MySQL();
        $this->mysql->connect();
    }

    public function get_am_sales() {
        $query = "SELECT site_id, dly_sls AS am_sales, cov_cnt AS am_covers
                  FROM v_sales_yesterday
                  WHERE am_pm = 'AM'
                  GROUP BY site_id
                  ORDER BY site_id ASC";
        $this->mysql->query($query);
        $result = $this->mysql->return_assoc();
        return $result;
    }

    public function get_pm_sales() {
        $query = "SELECT site_id, dly_sls AS pm_sales, cov_cnt AS pm_covers
                  FROM v_sales_today
                  WHERE am_pm = 'PM'
                  GROUP BY site_id
                  ORDER BY site_id ASC";
        $this->mysql->query($query);
        $result = $this->mysql->return_assoc();
        return $result;
    }

    public function get_comp_sales() {
        $query = "SELECT business_date, site_id, dly_sls AS comp_sales
                  FROM v_sales_today_comp 
                  WHERE am_pm = 'PM'
                  GROUP BY site_id
                  ORDER BY site_id ASC";
        $this->mysql->query($query);
        $result = $this->mysql->return_assoc();
        return $result;
    }

    public function disconnect() {
        unset($this->mysql);
    }

$sales = new Sales();
$sales->connect();
$amSales = $sales->get_am_sales();
$pmSales = $sales->get_pm_sales();
$compSales = $sales->get_comp_sales();
$sales->disconnect();

mysql连接是否在“connect”函数执行后关闭?如果认为有必要,保持连接打开的最佳方式是什么(使用面向对象的方法)?如果您需要更多详细信息,请告诉我,我提前感谢您的帮助。

这似乎完全没有必要。您不必为每个查询打开和关闭连接。你在使用某种框架吗?如果没有,您必须这样做,因为所有框架都有活动记录和DB助手,以便更容易与DB交互。这对你来说是一篇很棒的文章


这正是你想要的。

这完全没有必要。您不必为每个查询打开和关闭连接。你在使用某种框架吗?如果没有,您必须这样做,因为所有框架都有活动记录和DB助手,以便更容易与DB交互。这对你来说是一篇很棒的文章


它正是您想要的。

一般来说,您只希望在应用程序执行期间创建一次MySQL实例

如果您有一个总体应用程序对象,那么您可以在应用程序对象内部创建您的MySQL实例并从那里访问它

另一种方法是为MySQL实例创建一个对象,然后通过“instance()”方法访问该对象

这样,在php脚本的执行周期中只打开一个连接,它将在脚本执行结束时被丢弃

现在您的代码看起来是这样的:

$query = "SELECT * FROM users";

$rs = Mysql::instance()->query($query);
如果您需要如何为您的目的设置单例实例的工作示例,您可以查看:


通常,您只希望在应用程序执行期间创建一次MySQL实例

如果您有一个总体应用程序对象,那么您可以在应用程序对象内部创建您的MySQL实例并从那里访问它

另一种方法是为MySQL实例创建一个对象,然后通过“instance()”方法访问该对象

这样,在php脚本的执行周期中只打开一个连接,它将在脚本执行结束时被丢弃

现在您的代码看起来是这样的:

$query = "SELECT * FROM users";

$rs = Mysql::instance()->query($query);
如果您需要如何为您的目的设置单例实例的工作示例,您可以查看:


您遇到的错误是什么?通常情况下,你不能重新连接。为了防止多个连接,您还应该为您的DB类使用。我在尝试查询时出错,这使我相信在查询之前连接已关闭。好的,我再次询问:您遇到了什么/哪个错误?停止假设,尝试测试或调试。警告:mysql_query()[function.mysql query]:用户“www data”@“localhost”(使用密码:否)的访问被拒绝警告:mysql_query()[function.mysql query]:无法建立到服务器的链接您遇到了什么错误?通常情况下,你不能重新连接。为了防止多个连接,您还应该为您的DB类使用。我在尝试查询时出错,这使我相信在查询之前连接已关闭。好的,我再次询问:您遇到了什么/哪个错误?停止假设,尝试测试或调试。警告:mysql\u query()[function.mysql query]:拒绝用户“www data”@'localhost(使用密码:否)的访问警告:mysql\u query()[function.mysql query]:无法建立到服务器的链接