簡體   English   中英

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

和一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM