Разбивка на страницы — таблица со слишком большим количеством строк

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

Мне нужно только количество строк и ничего больше. Я пробовал это:

public function countRows()
{
    $q = $this->createQueryBuilder('q');

    $q->select('q.username');

    return $q->getQuery()->getSingleScalarResult();
}

но это кажется довольно медленным.

Есть ли лучший и быстрый способ подсчета строк? Или может еще как сделать пагинацию, но как тогда узнать сколько там будет страниц?


person Faery    schedule 24.09.2012    source источник


Ответы (2)


Попробуй это:

public function countRows()
{
    $q = $this->createQueryBuilder('q');

    $q->select('COUNT(q.username)');

    return $q->getQuery()->getSingleScalarResult();
}

Ваш запрос не подсчитывал, а выбирал все строки, что могло быть очень медленным.

person S3Mi    schedule 24.09.2012
comment
Большое спасибо! Теперь намного лучше! Кажется, что строк больше 320 000, а не 1000 :D - person Faery; 24.09.2012

И если вы вычисляете COUNT много раз, сохраните результат метода countRows() в свойстве этого объекта и верните его:

public function countRows()
{
    if ($this->countRowsQ === null)
    {
        $q = $this->createQueryBuilder('q');

        $q->select('COUNT(q.username)');

        $this->countRowsQ = $q->getQuery()->getSingleScalarResult();
    }

    return $this->countRowsQ;
}
person Yegor Lukash    schedule 24.09.2012