[英]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
和一個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
.......
映射中的鍵是表中的id字段,值是更新的timestamp字段。
我想在表中獲得所有時間戳大於該值的表中的所有產品。
喜歡
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程序。
想知道這是否可行,我覺得對此有更好的解決方案,但無法解決。
我會在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都可以有效地利用它。 但是使用這種方法,我們可能會在單個查詢中達到表引用數量的上限。 因此,可能需要將該方法分解為多個塊。
就個人而言,我不會在數據庫過程中隱藏復雜性。
尚不清楚通過實現數據庫過程將獲得什么好處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.