计算每页请求的查询数量?

时间:2012-10-22 10:33:13

标签: php mysql optimization mysqli

我需要知道每页请求执行了多少个sql查询。由于网站已经完成,而我正在进行优化分析,我更愿意,如果提供的任何解决方案都不需要我改变整个网站结构。

我使用单个连接将所有查询发送到MySQL数据库:

define('DATABASE_SERVER', '127.0.0.1');
define('DATABASE_NAME', 'foco');
define('DATABASE_USERNAME', 'root');
define('DATABASE_PASSWORD', '');

$DB_CONNECTION = new mysqli(
    DATABASE_SERVER,
    DATABASE_USERNAME,
    DATABASE_PASSWORD,
    DATABASE_NAME,
    3306
);

然后执行查询我使用:

$query = "SELECT * FROM `sometable`";
$queryRun = $DB_CONNECTION->query($query);

有没有办法计算已发送的查询数量,并在php关闭连接之前在文本文件中记录答案?

4 个答案:

答案 0 :(得分:4)

您可以扩展mysqli对象并覆盖查询方法:

class logging_mysqli extends mysqli {
    public $count = 0;
    public function query($sql) {
        $this->count++;
        return parent::query($sql);
    }
}

$DB_CONNECTION = new logging_mysqli(...);

答案 1 :(得分:1)

最好的方法之一是在$DB_CONNECTION->query()内运行日志功能。

通过这种方式,您可以将每个单独的查询记录到db表,或者对查询速度执行基本测试,然后存储它,或者只增加计数(查询数量)并存储它。

答案 2 :(得分:0)

创建扩展mysqli的类,生成该类的$ DB_CONNECTION对象,并在query()方法的实现中执行统计。最终它应该致电parent::query()来做实际工作。

答案 3 :(得分:0)

创建一个直接代替mysqli的代理...

class DatabaseCounter {
    private $querycount = 0;
    private $mysqli = null;

    // create mysqli in here in constructor


    public function query(...) {
        $this->queryCount++;
        $this->mysqli->query(...);
    }
}

$DB_CONNECTION = new DatabaseCounter();