簡體   English   中英

PHP / MySQL性能問題

[英]PHP/MySQL performance question

對於那些了解性能的人來說,只是有一個快速的問題。 我創建了一個“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();

“connect”函數執行后mysql連接是否關閉? 如果認為有必要,保持連接打開的最佳方法是什么(使用面向對象的方法)? 如果您需要更多細節,請告訴我,我提前感謝您的幫助。

這完全沒必要。 您不必為每個查詢打開和關閉連接。 你在使用某種框架嗎? 如果不是,您必須因為所有框架都有活動記錄和DB幫助程序,以便更容易與DB交互。 這對你來說是一篇很棒的文章

http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/

正是你所期待的。

通常,您只想在執行應用程序期間創建一次MySQL實例。

如果您有一個總體的Application對象,那么您可以在Application對象內部創建MySQL實例並從那里訪問它。

另一種方法是為MySQL實例創建一個Singleton對象,然后通過'instance()'方法進行訪問。

這樣,您只需在php腳本的執行周期內打開一個連接,並在腳本執行結束時將其丟棄。

所以現在你的代碼看起來像這樣:

$query = "SELECT * FROM users";

$rs = Mysql::instance()->query($query);

如果您需要有關如何為您的目的設置Singleton實例的工作示例,您可以查看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM