2009-05-06 40 views
7

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

如果没有什么内置的东西,我会添加一些东西到我的数据库类来计算它们,但它看起来像已经可用的那种功能。

回答

6

选项之一将是通过包装来传递您所有的疑问的:

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

+1

谢谢,'显示状态'正是我想要的。我去了:SHOW STATUS WHERE Variable_name IN('Com_select','Com_update','Com_insert','Com_delete') – DisgruntledGoat 2009-05-06 20:00:49

3

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

副手,我知道Kohana这是否与Profiler图书馆。我会假设大多数框架的DB库都有类似的功能。

如果您对使用第三方框架或数据库抽象层犹豫不决,只需对PHP5的内置PDO类进行子类化即可获得成功。您可以添加一些基本的基准测试信息和查询计数,并将调用query()或​​传递给父类。

4

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

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 ?>