mysql 查询要在存储过程中执行的长查询
mysql query for long query to execute in stored procedure
我在 java 中得到了一个像这样的哈希映射
{(1,'2018-06-29 10:19:33'),(4,'2018-06-29 10:19:34'),(10,'2018-06-29 10:19:38'),....}
地图长度可达3000
和一个mysqltable
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
.......
映射中的键是 table 中的一个 id 字段,值是更新的时间戳字段。
我想获取 table 中时间戳大于地图中值的所有产品。
喜欢
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 语句,最后 return 结果集返回 java 程序。
想知道这是否可行,我觉得有更好的解决方案,但无法弄清楚。
我会在 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 都可以有效地利用它。但是使用这种方法,我们可能会在单个查询中达到 table 引用数量的上限。所以这种方法可能需要分解成块。
就个人而言,我不会隐藏数据库过程的复杂性。
不清楚我们通过实施数据库过程可以获得什么好处。
我在 java 中得到了一个像这样的哈希映射
{(1,'2018-06-29 10:19:33'),(4,'2018-06-29 10:19:34'),(10,'2018-06-29 10:19:38'),....}
地图长度可达3000
和一个mysqltable
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
.......
映射中的键是 table 中的一个 id 字段,值是更新的时间戳字段。
我想获取 table 中时间戳大于地图中值的所有产品。
喜欢
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 语句,最后 return 结果集返回 java 程序。
想知道这是否可行,我觉得有更好的解决方案,但无法弄清楚。
我会在 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 都可以有效地利用它。但是使用这种方法,我们可能会在单个查询中达到 table 引用数量的上限。所以这种方法可能需要分解成块。
就个人而言,我不会隐藏数据库过程的复杂性。
不清楚我们通过实施数据库过程可以获得什么好处。