如何用随机数据生成1000000行?

时间:2014-08-02 19:43:59

标签: mysql sql

背景

我在研究某种数据记录器。

我想尝试1000000(1M)行所需的存储空间以及Raspberry Pi如何处理这样的大表。我想用分组,计算平均值和其他性能实验来运行一些查询。

我的表格如下:

CREATE TABLE `data` 
(
  `id`         bigint(20) NOT NULL      AUTO_INCREMENT,
  `datetime`   timestamp  NULL          DEFAULT CURRENT_TIMESTAMP,
  `channel`    int(11)                  DEFAULT NULL,
  `value`      float                    DEFAULT NULL,

  PRIMARY KEY (`id`)
)

问题

如何在MySQL 中填充1亿行

要求:

  • data.datetime字段:随机时间戳,但仅限一年
  • data.value字段:来自给定范围的随机浮点数(例如0.00-100.00)
  • data.id是自动增量,无需关心
  • data.channel总是1,也不需要关心

我对SQL有点了解,但我不擅长SQL等中的 PL / SQL,循环。

编辑:

说清楚 - 我正在使用MySQL 5.5。

提到PL / SQL是我的错误,我认为PL /代表SQL中的程序功能,而不仅仅是Oracle。

2 个答案:

答案 0 :(得分:14)

尝试使用stored procedure(将1000替换为所需的行数,将2014替换为测试年份,另请参阅generate random timestamps in mysql

CREATE TABLE `data` 
(
  `id`         bigint(20) NOT NULL      AUTO_INCREMENT,
  `datetime`   timestamp  NULL          DEFAULT CURRENT_TIMESTAMP,
  `channel`    int(11)                  DEFAULT NULL,
  `value`      float                    DEFAULT NULL,

  PRIMARY KEY (`id`)
);


DELIMITER $$
CREATE PROCEDURE generate_data()
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < 1000 DO
    INSERT INTO `data` (`datetime`,`value`,`channel`) VALUES (
      FROM_UNIXTIME(UNIX_TIMESTAMP('2014-01-01 01:00:00')+FLOOR(RAND()*31536000)),
      ROUND(RAND()*100,2),
      1
    );
    SET i = i + 1;
  END WHILE;
END$$
DELIMITER ;

CALL generate_data();

根据您的需要进行修改。删除程序:

DROP PROCEDURE generate_data;

也许这可以给你一个开始!

答案 1 :(得分:0)

我们有MySQL Random Data Generator-易于使用的过程,可从mysql本身内部生成随机数据。