Запрос Mysql тормозит

12
Lord Maverik
На сайте с 15.04.2003
Offline
471
#11

Есть подписчики, есть рассылка.

В temp создается связка - подписчки рассылка, и потом из нее по расписанию выбираем кому и что отправить и отпраавляем, отмечая, что письмо было отправлено.

RedMall.Ru (https://redmall.ru) - Товары из Китая (Таобао, Tmall) с проверкой качества, скидка для форумчан 7% Партнерская программа 2 уровня: 5% + 5%. Подробнее. (https://redmall.ru/about/partner/)
Dreammaker
На сайте с 20.04.2006
Offline
570
#12

Lord Maverik, в cms_subscribe есть id подписок, которые не существуют в cms_subscribe_temp?

Если я правильно понял запрос

select `st`.`id_subs`, `st`.`id` as `st_id`,`sb`.`id`
FROM `cms_subscribe_temp` as `st`
LEFT JOIN `cms_subscribe` as `sb` ON (`st`.`id_subs` = `sb`.`id`)
limit 10

вы, кроме всего прочего, ищете записи в cms_subscribe_temp соответствия которым нет в таблице cms_subscribe. По крайней мере, LEFT JOIN используется в таких случаях.

Для чего он использован в рамках вашей задачи я не могу понять. Но я с SQL работал последние годы мало, больше с NoSQL (Mongo). С SQL только с PostgresQL (полнотекстовый поиск как замена сфинксу использовали).

Может я неправильно понял задачу, но, как мне кажется, вам нужен простой WHERE, без LEFT JOIN.

IL
На сайте с 20.04.2007
Offline
435
#13
Lord Maverik:
по расписанию выбираем кому и что отправить и отпраавляем, отмечая, что письмо было отправлено.

ИМХО, лучше разбить на два запроса..

Первым - выбрать то, что по расписанию положено отправить..

Вторым - дёрнуть нужные для отправки данные из другой таблицы, используя конструкцию WHERE id IN (...id-шники из результата первой выборки..)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
X
На сайте с 09.11.2006
Offline
132
#14

У меня как-то многоэтажный join запрос в 100 ускорился, когда методом тыка увеличили join_buffer_size. В моем случае до 4M

Lord Maverik
На сайте с 15.04.2003
Offline
471
#15

Переделал в итоге на 2 запроса. И вообще заодно перестроил логику работы. Просто летает теперь )

---------- Добавлено 11.11.2019 в 07:05 ----------

Dreammaker:
вы, кроме всего прочего, ищете записи в cms_subscribe_temp соответствия которым нет в таблице cms_subscribe. По крайней мере, LEFT JOIN используется в таких случаях.

Нет, не верно.

Я выбираю все не отправленные email и подтягиваю к ним данные из базы самой рассылке, что отправлять.

Делал давно, незнаю почему так сделал. Переделал на более логичный вариант. Выбираем активную рассылку, для нее уже выбираем кому отправлять. Если не кому, делаем рассылку неактивной.

Dreammaker
На сайте с 20.04.2006
Offline
570
#16
Lord Maverik:
Я выбираю все не отправленные email и подтягиваю к ним данные из базы самой рассылке, что отправлять.
Делал давно, незнаю почему так сделал.

Ну, я предполагал, что задумывалось другое или же задача первоначально другая стояла :)

Lord Maverik:
Переделал в итоге на 2 запроса. И вообще заодно перестроил логику работы. Просто летает теперь )

Там по идее и одним запросом можно, но двумя даже понятнее и логичнее.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий