Задавайте вопросы, мы ответим
Вы не зашли.
Когда-то попадалась на глаза такая штука, как остановка выборки (SELECT) при достижении Х просмотренных записей. Чё-то никак не удаётся найти как это делается. Неужели мне это приснилось?))
Суть задачи. Есть табличка с большим количеством строк. Т.к. COUNT на большом количестве справляется не быстро, мне достаточно знать, есть ли там Х строк, полное количество можно не считать. Как узнать?
+-----------------+
| COUNT(`id`) |
+-----------------+
| 499811 |
+-----------------+
1 row in set (2.26 sec)
Готов остановиться на считалке в 20000
Собственно, запрос используется в пагинации, данных вон столько, страница из-за подсчёта количества страниц грузится 3 секунды, хочу ускорить.
Неактивен
Если запрос хороший (есть индекс по нужным полям), то count должен работать достаточно быстро. 2 секунды - явный перебор. Я бы начал с этого. А вообще кроме limit ничего похожего нету. Можно на explain посмотреть, там будет неплохая оценка количества строк.
Неактивен
Хм, упорно помню что был где-то такой параметр. Может где-то у перконы попадалось, т.к. с ней работаю.
В общем, с помощью индекса удалось сократить выполнение данного запроса до 0.22 секунды, быстрее никак. Но основной тормоз был всё же не в индексе, а в джоине, который изначально был в этом запросе. С джоином запрос теперь выполняется за 1.4 секунды. Для второй таблицы не используется никаких условий, т.е. просто присоединение и ничего больше. На сколько нормально такое время выполнения в случае с джоином?
Неактивен
Замедление из-за JOIN абсолютно нормально. Представьте как он выполняется - для каждой строчки нужно заглядывать в другую таблицу.
Неактивен
Что-то я не очень понимаю, COUNT ведь игнорирует LIMIT команду, т.к. LIMIT ограничивает лишь число возвращаемых строк, но не значение команды COUNT. Разве не так?
В случаях, когда мне необходимо узнать "больше ли 200 записей в выборке", я делаю что-то вроде этого SELECT 1 FROM <...> LIMIT 200. И дальше смотрю есть ли 200 строк или нет. Такой запрос выполняется быстро, если индексы на правильных местах.
Неактивен
Всё верно. Про LIMIT здесь речи не шло, то в пример привели как "единственный способ ограничения".
Неактивен