Percona MySQL 8.0.15-5
Привет всем, не могли бы вы помочь мне с проблемой?
Я хочу переписать запрос, используя временную таблицу дляCTE с использованием «с».Этот запрос должен выполнять блокировку данных из одной таблицы в другую.
Рабочий процесс следующий: мы выбираем пакет данных, вставляем его в таблицу назначения, затем выбираем максимальный идентификатор из этого пакета, сохраняем егои при дальнейшем вызове процедуры выбор данных начинается с этого идентификатора.
'with' хорошо подходит в этом случае, чтобы не создавать временную таблицу.Я написал следующий запрос:
insert ignore quotes
(
time,
symbol,
server,
bid,
ask,
last,
volume
)
WITH temp AS
(
SELECT
q.id,
q.`time`,
q.symbol,
q.server,
q.bid,
q.ask,
q.last,
q.volume,
q.created_at
FROM
`old.quotes2` q
WHERE
q.id > id
ORDER BY
q.id asc
LIMIT
write_limit
), m AS (SELECT @max := MAX(t.id) max FROM temp t) -- m subclause not executed
SELECT
t.time,
`search_or_add_of_symbol_id_from_name`(t.symbol) symbol,
`search_of_server_id_from_name`(lower(t.server)) server,
t.bid,
t.ask,
t.last,
t.volume
FROM temp t
MySQL не выполняет второй запрос, называемый m, вероятно, из-за того, что я не буду использовать его в будущем.Чтобы решить эту проблему, я должен добавить дополнительное условие 'join' к основному 'select'.
Можно ли заставить MySQL выполнить подпункт 'm'?Может быть, есть какая-нибудь подсказка, которая заставит оптимизатор выполнить подпункт 'm'?