Очень долго выполняется запрос. Если я использую только один параметр, то все быстро. Но когда использую OR: mi.interest_id IN ('$interest_values') OR mt.tag_id IN ('$tag_values')
то долго.
В таблице members_tags около милиона записей.
Поиск должен выдавать всех members по указаным интересам и тагам.
SELECT DISTINCT m.email_address
FROM members m
LEFT JOIN members_tags mt ON mt.member_id = m.member_id
LEFT JOIN members_interests mi ON mi.member_id = m.member_id
WHERE mi.interest_id IN ('$interest_values') OR mt.tag_id IN ('$tag_values')
поскольку таблицы (по крайней мере одна) довольно большие, то не надо их лефт-джойнить друг на дурга, а потом фильтровать. Данный запрос можно эквивалентно разбить на два, используя union
и inner join
:
SELECT DISTINCT m.email_address
FROM members AS m
INNER JOIN members_tags AS mt ON (
mt.member_id = m.id
AND mt.tag_id IN (....))
UNION
SELECT DISTINCT m.email_address
FROM members AS m
INNER JOIN members_interests AS mi ON (
mi.member_id = m.id
AND mi.interest_id IN (....))
при этом в этих таблицах связи многие ко многим на полях member_id, tag_id
необходимо добавить индекс.
Возможно также джойнить не сами таблицы связи а distinct-выборку из них, например
SELECT m.email_address
FROM members AS m
INNER JOIN (
SELECT DISTINCT member_id
FROM members_tags AS mt
WHERE mt.tag_id IN (....)
UNION ...
) as x on x.member_id = m.id
и еще потенциально, в таблице members
можно сделать индекс, включающий id
и email_address
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть два input type date, где выставлена сегодняшняя дата и завтрашняя
Я не совсем понимаю как такое возможноучусь делать отправку формы через php обработчик, чтобы страница не перезагружалась использую ajax пока...