powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорить подсчет записей.
4 сообщений из 4, страница 1 из 1
Ускорить подсчет записей.
    #39121195
supermike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня похожий вопрос. Никак не могу придумать, в интернете тоже не нашел. Может что неправильно делаю?
Задача такая: нужно подсчитать приблизительное кол-во строк в сложной выборке (с множеством join'ов, условий, и записей), но при этом подсчет должен происходить не дольше 1 сек. Проблема именно в подсчете, основной запрос выполняется быстро.

Количество записей в modx_site_content порядка 1+млн, а в product_tmplvar_contentvalues порядка 10+млн. В выборку попадает в среднем 150-200к товаров из таблицы `modx_site_content`, соответственно с добавлением такого же кол-ва для каждого `product_tmplvar_contentvalues`.

Запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT SQL_NO_CACHE
COUNT(*)
FROM
`modx_site_content` AS `content`
LEFT JOIN `product_tmplvar_contentvalues` AS `a65` ON `a65`.`contentid` = `content`.`id` AND `a65`.`tmplvarid` = 65
LEFT JOIN `product_tmplvar_contentvalues` AS `a95` ON `a95`.`contentid` = `content`.`id` AND `a95`.`tmplvarid` = 95
WHERE
`content`.`parent` = 66860
AND `a65`.`value` = "42112" 
AND `a95`.`value` = "42117"
LIMIT 100


Explain

см. приложение

Запрос занимает 5 сек. И это самый простой вариант. Если количество JOIN'ов увеличивается(а их может быть порядка 20), то время подсчета увеличивается до 2+ мин.

Структура таблиц
modx_site_content
id (int 10)
parent (int 10)

product_tmplvar_contentvalues
id (int 11)
contentid (int 11)
tmplvarid (int 11)
value (double)

Индексы
modx_site_content


product_tmplvar_contentvalues



Как можно ускорить запрос?
...
Рейтинг: 0 / 0
Ускорить подсчет записей.
    #39121339
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
supermike,
тебе надо подсчитать количество в конечном результате?
...
Рейтинг: 0 / 0
Ускорить подсчет записей.
    #39121341
supermike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем пошел другим путем. COUNT не воспринимает LIMIT, как здесь советовали, в итоге запрос идет по всем записям из-за чего, как я понял, и получается эта задержка в 5+ сек. Так что я делаю SELECT 1 ограничивая LIMIT 100 и тем самым получаю результат за 0.00.. сек, и подсчитываю кол-во строк в выводе с помощью mysql->num_rows(). А в необходимом месте пишу: "найдено более 100 позиций.". Просто интересно было как это делают другие разработчики.
Сама идея вот в чем: имеется товар с набором возможных конфигураций(цвет, размер...). Человек в фильтре выбирает необходимые парамтеры, в процессе выбора, как на яндексе, ему отображается кол-во товаров после фильтрации.
...
Рейтинг: 0 / 0
Ускорить подсчет записей.
    #39121379
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
supermikeLIMIT 100supermikeпишу: "найдено более 100 позиций."Тогда надо LIMIT 101, чтобы слово "более" было честным.

Я делаю аналогично в одном поиске, где поиск очень тяжелый, а пользователь может задать такое условие, что в результат пойдут десятки-сотни тысяч записей.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорить подсчет записей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]