2009-05-06 84 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 ?>