У меня есть большие таблицы MySQL с сотнями тысяч строк.Как сделать быстрый подсчет на больших таблицах?
Мне нужно написать запрос в таблице клиентов, в которой подсчитывается количество клиентов, с которыми можно будет связаться снова.
например.
SELECT 'This week', COUNT(*) FROM customers
WHERE sales_person_id = 1 AND DATEDIFF(NOW(), available_date) < 7
UNION
SELECT 'Next week', COUNT(*) FROM customers
WHERE sales_person_id = 1 AND DATEDIFF(NOW(), available_date) >= 7
AND DATEDIFF(NOW(), available_date) < 14
UNION
... (a few more like this)
Написав подобный запрос на другой большой стол, я заметил, что изменения двигателя от InnoDB к MyISAM ускорило запрос значительно (InnoDB не требуется для этих таблиц, поскольку они не имеют внешнего ключа проверки). Есть ли что-нибудь еще, что я могу сделать, чтобы ускорить такие подсчеты (кроме индексации соответствующих полей)?
Просто совет, хотя в этом случае, вероятно, не имеет значения - всегда проверяйте, действительно ли вам нужно UNION, альтернатива - «UNION ALL» дешевле (на больших результирующих наборах это могут быть * порядки величин) – Unreason
Кроме того, только ради насыщения - это ваш индекс на (available_date, sales_person_id)? – Unreason