7

PHP 或 MySQL 中是否有内置函数可以提供页面上使用的 MySQL 查询总数?我在很多网站(主要是论坛)上看到他们在底部有一条消息,上面写着“页面在 0.6 秒内生成,有 20 个查询”。

如果没有内置任何东西,那么我会在我的数据库类中添加一些东西来计算它们,但它似乎是已经可用的那种功能。

4

4 回答 4

7

选项一是通过包装器传递所有查询:

function custom_mysql_query($sql)
{
    $GLOBAL['query_count'] ++;
    return mysql_query($sql);
}

请注意,这仅用于说明,没有错误处理等。

您可以查询 MySQL 查询运行的数量:

mysql> SHOW STATUS LIKE 'Com_select';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select    | 2     | 
+---------------+-------+
1 row in set (0.00 sec)

您可能想要执行以下操作:

SHOW STATUS LIKE 'Com_%';

然后将 Com_select、Com_update、Com_insert 和 Com_delete 相加

于 2009-05-06T16:39:56.547 回答
4

我所做的是创建一个计数的 sql 查询类,每次运行类中的查询方法时,它都会将 1 添加到一个名为 querycount 的变量中,这样我就有了一个运行总数。

于 2009-05-06T16:31:50.297 回答
3

PHP 的原生 mysql/mysqli 扩展中没有内置任何内容。如果您使用的是数据库抽象层,则可能会内置某种类型的分析/基准测试来为您提供该信息。

顺便说一下,我知道Kohana使用Profiler库来做到这一点。我会假设大多数框架的数据库库都做类似的事情。

如果您对使用第 3 方框架或数据库抽象层犹豫不决,我通过简单地继承 PHP5 的内置PDO类已经取得了成功。您可以添加一些基本的基准测试信息和查询计数,并将query()orexecute()调用传递给父类。

于 2009-05-06T16:29:53.420 回答
2

为了避免全局变量,在您的 db 类中:

class db {
    public static $query_count = 0;

    public static function query($str) { 
        self::$query_count++;
        // your db query method here
    }
}

然后只需像这样访问您的静态查询计数:

<?= db::$query_count ?>
于 2012-06-01T17:00:08.363 回答