背景
我在研究某种数据记录器。
我想尝试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。
答案 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本身内部生成随机数据。