Как я могу подсчитать общее количество запросов MySQL, используемых на странице? - PullRequest
7 голосов
/ 06 мая 2009

Есть ли встроенная функция в PHP или MySQL, которая будет предоставлять общее количество запросов MySQL, используемых на странице? Я видел, что на многих сайтах (в основном на форумах) внизу есть сообщение с надписью «Страница сгенерирована за 0,6 секунды с 20 запросами».

Если ничего не встроено, тогда я добавлю что-то в свой класс базы данных, чтобы подсчитать их, но похоже, что такая функциональность уже доступна.

Ответы [ 4 ]

7 голосов
/ 06 мая 2009

Первый вариант - передать все ваши запросы через оболочку:

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

4 голосов
/ 06 мая 2009

Что я делаю, так это создаю класс запросов sql, который подсчитывает, добавляет 1 к переменной с именем querycount при каждом запуске методов запросов в классе. Таким образом, у меня есть промежуточный итог.

3 голосов
/ 06 мая 2009

Нет ничего встроенного в собственные расширения PHP MySQL / MySQL. Если вы используете слой абстракции БД, возможно, существует встроенный анализ / сравнительный анализ, который даст вам эту информацию.

Я знаю, что Кохана делает это с библиотекой Profiler . Я бы предположил, что библиотеки БД большинства фреймворков делают нечто подобное.

Если вы не решаетесь использовать сторонний фреймворк или уровень абстракции базы данных, я добился успеха, просто подклассифицировав встроенный класс PHP5 PDO . Вы можете добавить некоторую базовую информацию о контрольных показателях и количество запросов и передать вызовы query() или execute() родительскому классу.

2 голосов
/ 01 июня 2012

Чтобы избежать глобалов, в вашем классе БД:

class db {
    public static $query_count = 0;

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

Тогда просто получите доступ к количеству статических запросов, например:

<?= db::$query_count ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...