回答

收藏

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

技术问答 技术问答 367 人阅读 | 0 人回复 | 2023-09-14

背景
. T% v: o8 p- ]( y% ~) J# }我正在从事某种数据记录器的工作。
) w1 V) M2 @) _$ U我想尝试1000000(1M)行需要多少存储空间,以及Raspberry Pi如何处理如此大的表。我想对一些查询进行分组,计算平均值和其他性能实验。; V* i& E; }7 L! N; k  f) J- q) C$ A: r
我的桌子看起来像这样:+ X- i' L5 g# t' {
CREATE TABLE `data`
* E: ~$ V* k1 [" Q* t/ j(: l( b0 l/ n2 P
  `id`         bigint(20) NOT NULL      AUTO_INCREMENT,
7 ~- {( j8 A1 C( d1 T  `datetime`   timestamp  NULL          DEFAULT CURRENT_TIMESTAMP,
% Q" _) \" D+ m/ N  `channel`    int(11)                  DEFAULT NULL,
7 }5 Y8 L9 C, B& u3 \  `value`      float                    DEFAULT NULL,7 G: Q* u! O& j' Y/ u0 q
  PRIMARY KEY (`id`)9 u* k2 [$ ]: ^; O2 X
)/ V8 L# K1 j! p* t/ }9 t; T, l
问题
! j9 ^3 V# I* R4 g' s# J. m0 h如何 在MySQL 中用1万亿行填充它?
. @- x9 `( W0 n% e6 u* G要求:: z- G# ^! a2 o. p7 x7 O" |3 G
data.datetime 栏位:随机时间戳记,但仅限一年
0 n1 C7 I7 A7 n& S: K. Bdata.value 栏位:指定范围内的随机浮点数(例如0.00-100.00)6 n0 z4 p! v/ l7 M1 S
data.id 是自动增量,无需在意
" D  B) I1 K: o$ C. X% Cdata.channel 总是1,也不必在意) h6 N2 v2 K6 }8 ]! R

4 X' p" [3 o' C& |$ E& {9 _我对SQL有一点了解,但我在 PL / SQL,SQL 循环等方面并不擅长。* ^2 w/ n3 L5 M9 u, t6 w- S
编辑:( _7 l1 n. E/ o! m1 d
为了明确起见-我使用MySQL 5.5。9 ~4 a; G6 ~( @( w
提到PL / SQL是我的错误,我认为PL /通常代表SQL中的过程功能,而不仅仅是Oracle。
8 S: n" S1 q) h4 J' K. ^                ; D; J4 h7 L% M( I2 e7 w; E- Z
解决方案:
9 s& v7 y, _' s1 d6 m! D                ; h8 l+ L8 k4 }

3 n1 n' r4 W; v* t# f& d4 n9 |  Q$ {) q6 Y9 D. q$ ^! Y
                尝试使用存储过程(1000用所需的行数和2014测试年份代替,另请参见在mysql中生成随机时间戳记)
4 T+ U  Y' M: a& ?- N  `, YCREATE TABLE `data`
# r; F# H2 }4 _, K! I(& l/ [4 ?5 Y. \5 m  [$ ?
  `id`         bigint(20) NOT NULL      AUTO_INCREMENT,7 K* m' P* r+ o9 D$ a2 r
  `datetime`   timestamp  NULL          DEFAULT CURRENT_TIMESTAMP,
9 Y/ k' p1 \3 V6 V  `channel`    int(11)                  DEFAULT NULL,
/ v; E9 \2 n: E% z# M+ X& f  `value`      float                    DEFAULT NULL,
3 L  s, n$ g' p; A9 M1 J7 `  PRIMARY KEY (`id`)
6 ^& d4 a% Y! n  K);
; Z' ]* n& {. {9 P' L0 p
# Q* j3 C+ T$ DDELIMITER $$, a& S, x0 Y. {6 A/ e/ R6 R/ t8 y% {& k
CREATE PROCEDURE generate_data()# d# t9 _: U# y
BEGIN
4 _8 }1 y& T$ |1 R% O- T* m" @  DECLARE i INT DEFAULT 0;1 x- h7 i; p5 U, w' O0 [  x4 }1 c5 O" C
  WHILE i 修改以适应您的需求。删除过程:
  v# m1 d7 i: A% s; w& zDROP PROCEDURE generate_data;
' ~$ s0 r5 `  r/ g也许这可以给您一个开始!
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则