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 мог бы эффективно использовать это. Но при таком подходе мы, вероятно, достигнем верхнего предела количества ссылок на таблицы в одном запросе. Таким образом, этот подход может быть разбит на куски.


Лично я не скрывал бы сложность процедуры базы данных.

Не ясно, какую выгоду мы получим, внедрив процедуру базы данных.

Другие вопросы по тегам