MySQL запрос для длинного запроса для выполнения в хранимой процедуре
Я получил хэш-карту в Java, как это
{(1,'2018-06-29 10:19:33'),(4,'2018-06-29 10:19:34'),(10,'2018-06-29 10:19:38'),....}
Длина карты может достигать 3000
и стол MySQL
id name updated
1, firstProduct, 2018-06-29 09:19:33
2, secondproduct, 2014-06-29 10:19:33
4, fourthproduct, 2016-06-29 09:19:33
10, tenthproduct, 2018-06-29 06:13:32
.......
ключ на карте - это поле идентификатора в таблице, а значение - это обновленное поле метки времени.
Я хотел бы получить все продукты в таблице, чья временная метка больше этого значения на карте.
лайк
select * from products where id = 1 and updated > '2018-06-29 10:19:33'
select * from products where id = 4 and updated > '2018-06-29 10:19:34'
...
Но на карте может быть до 3000 записей.
Я думаю о передаче значений карты в хранимую процедуру MySQL. Внутри процедуры цикл while выполнит оператор select для каждой записи карты в наборе результатов и, наконец, вернет набор результатов обратно в Java-программу.
Хотелось бы знать, возможно ли это, и я чувствую, что есть лучшее решение для этого, но не могу понять.
1 ответ
Я бы динамически сгенерировал оператор в Java.
Или:
SELECT p.id, p.name, p.update
FROM products p
WHERE 1=0
OR ( p.id = ? AND updated > ? )
OR ( p.id = ? AND updated > ? )
OR ( p.id = ? AND updated > ? )
(Скорее всего, MySQL не будет эффективно использовать индекс для этого запроса.)
Или мы могли бы сделать:
SELECT p.id, p.name, p.update FROM products p WHERE p.id = ? AND updated > ?
UNION ALL
SELECT p.id, p.name, p.update FROM products p WHERE p.id = ? AND updated > ?
UNION ALL
SELECT p.id, p.name, p.update FROM products p WHERE p.id = ? AND updated > ?
С определенным соответствующим индексом каждый SELECT мог бы эффективно использовать это. Но при таком подходе мы, вероятно, достигнем верхнего предела количества ссылок на таблицы в одном запросе. Таким образом, этот подход может быть разбит на куски.
Лично я не скрывал бы сложность процедуры базы данных.
Не ясно, какую выгоду мы получим, внедрив процедуру базы данных.