mysql - mysql 中存储过程的并行性?

标签 mysql database performance stored-procedures parallel-processing

我有一个存储过程每天插入一些记录。每天都会执行相同的逻辑,但按顺序执行。所以为了提高性能,我想引入并行性。那么有没有一种方法或者有人可以向我指出一些示例,让我可以在存储过程中并行运行一些逻辑。

编辑: 我在存储过程中使用的查询是:

INSERT INTO tmp (time_interval, cnt, dat, txn_id) SELECT DATE_FORMAT(d.timeslice, '%H:%i') as time_interval
     , COUNT(m.id) as cnt
     , date(d.timeslice) as dat
     , "test" as txn_id
  FROM ( SELECT min_date + INTERVAL n*60 MINUTE AS timeslice
           FROM ( SELECT DATE('2015-05-04') AS min_date
                       , DATE('2015-05-05') AS max_date) AS m
         CROSS
           JOIN numbers
          WHERE min_date + INTERVAL n*60 MINUTE < max_date
       ) AS d
LEFT OUTER
  JOIN mytable AS m
    ON m.timestamp BETWEEN d.timeslice
                        AND d.timeslice + INTERVAL 60 MINUTE
GROUP
    BY d.timeslice;

此查询将每天的记录按小时分组并插入到 tmp 表中。因此,我想每天并行运行此查询,而不是顺序运行。

谢谢。

最佳答案

d 是一组代表一天 24 小时的 DATETIME 吗?我的直觉告诉我它可以简化很多。可以通过添加 WHERE n BETWEEN 0 AND 23 来加快速度。也许:

SELECT '2015-05-04' + INTERVAL n*60 MINUTE AS timeslice
    FROM numbers
    WHERE n BETWEEN 0 AND 23

mytable 中有什么?特别是,“旧”数据是静态的还是变化的?如果它不变,为什么要反复重新计算呢?仅计算最后一小时的数据,将其存储到永久(非临时)表中。不需要并行性。

如果数据正在变化,最好避免

ON m.timestamp BETWEEN d.timeslice
                   AND d.timeslice + INTERVAL 60 MINUTE

因为(我认为)它不会很好地优化。让我们看看EXPLAIN SELECT...

在这种情况下,请使用存储过程来计算开始和结束时间,并构造(认为 CONCAT)其中包含常量的 ON 子句。

回到你的问题... MySQL 本身无法获得并行性。您可以编写单独的脚本来实现并行性,每个脚本都有自己的参数和连接。

关于mysql - mysql 中存储过程的并行性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31054373/

相关文章:

java - 如何使用 Java 连接到我的文件系统上的数据库

MySQL UPDATE 语句性能

Python 字典优化

mysql - 如何以 1 到 n 的关系检索左表中的一些随机行和右表中的所有相关行

mysql - 从 MySQL 数据库中选择数据

c# - 如何在两个日期之间进行搜索?

python - 数据分析问题的最佳解决方案

使用Parameters.AddWithValue 返回参数表示的C# 和MySQL 错误

java - Android 上 SQLite 数据库的简单导出和导入

c# - 将 WPF 应用程序连接到 MySQL 数据库