如何通过java同时运行上千个mysql select命令?

91zkwejq  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(273)

我需要每天运行1000个mysql select查询并将结果保存在不同的文件中(每个查询一个文件)。目前,每个mysql select查询都是通过shell脚本作为后台命令运行的,如下所示

echo "select (CART_ID), '', (USER_ID) from shopping_cart where (
    DATE_MODIFIED >= '2018-01-08 00:00:00' 
    and DATE_MODIFIED < '2018-01-10 00:00:00'
)" | mysql -u <usr_name> -p<password> -h <host> -P 3306 \
    -D <schema< -C -N --default-character-set=utf8 > \ 
      /Users/selumalai/Desktop/520_250_493991738_shopping_cart_\
      2018_01_12_00_00_00.dat &

目前,大约有5个shell脚本文件;每一个包含大约250个相似的查询,写入250个不同的文件。因此,每天大约有1000个文件。要求不是加入查询以产生统一的结果。
在java中有更好的方法吗?google表示,为每个查询(线程)打开mysql连接的成本很高,而运行mysql命令shell脚本的java程序并没有按预期工作。
有什么建议吗?

8iwquhpp

8iwquhpp1#

通常,最好编写更少的sql命令,在结果集中返回更多的信息行,然后使用程序读取这些数据。
您可以尝试这种查询:

select DATE(DATE_MODIFIED), CART_ID, USER_ID 
 from shopping_cart
where DATE_MODIFIED >= CURDATE() - INTERVAL 60 DAY
  and DATE_MODIFIED < CURDATE()
  ORDER BY DATE(DATE_MODIFIED)

这将得到一个包含60天数据的结果集,第一列给出日期。然后java程序就可以遍历结果集并提取每天的信息。
您知道,从shell脚本运行数千个查询的想法是可行的。但它天生就很慢。而且,很难并行化。运行一个查询要好得多,特别是如果数千个查询可以简化为一个查询的话。

相关问题