PHP/MySQL性能问题
我有一个简短的问题要问你们这些了解性能的人。我创建了一个“MySQL”类,每次执行查询时,我都会创建一个新的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
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);
如果您需要如何为您的目的设置单例实例的工作示例,您可以查看:
$query = "SELECT * FROM users";
$rs = Mysql::instance()->query($query);
如果您需要如何为您的目的设置单例实例的工作示例,您可以查看: