赞
踩
文章来源:PolarDB知乎号
作者:梦实
我们在测试数据库性能的过程中,通常需要生成一批测试数据。
以前,一般要写一段程序或者脚本来完成这项工作,但现在是2024年啦!时代变了!
PolarDB-X目前是少有的支持存储过程的分布式数据库,结合大模型,我们可以非常简单的来制造测试数据: 存储过程的原理和使用方法中心 通义官网
例如,有这样的表结构:
- CREATE TABLE t2 (
- id bigint(20) NOT NULL AUTO_INCREMENT,
- c1 varchar(64) NOT NULL ,
- c2 tinyint(4) NOT NULL ,
- c3 varchar(64) NOT NULL ,
- c4 tinyint(4) NOT NULL ,
- c5 varchar(64) NOT NULL ,
- c6 bigint(20) DEFAULT NULL ,
- c7 bigint(20) DEFAULT NULL ,
- c8 double DEFAULT NULL ,
- c9 bigint(20) DEFAULT NULL ,
- PRIMARY KEY (id),
- CLUSTERED INDEX gsi1 (c3)
- PARTITION BY KEY(c3)
- PARTITIONS 32,
- UNIQUE KEY uk1 (c5, c3, c1),
- KEY idx1 (c1),
- KEY idx2 (c5, c1, c8),
- KEY idx3 (c5, c3, c8)
- ) ENGINE = InnoDB PARTITION BY KEY(c1) PARTITIONS 32;
我们只需要对通义千问进行提问,描述以下需求,它就能自动生成一个存储过程:
写一个存储过程,为以下表生成100万条数据,其中,c1和c5是40位的十六进制字符串。(SQL内容省略了)
通义千问生成了这样的下面的存储过程:
- DELIMITER ;;
- CREATE PROCEDURE GenerateTestData()
- BEGIN
- DECLARE v_counter INT DEFAULT 0;
- DECLARE v_hex_string CHAR(40);
-
- WHILE v_counter < 1000000 DO
- -- 生成40位十六进制字符串
- SET v_hex_string = LPAD(LOWER(REPLACE(UUID(), '-', '')), 40, '0');
-
- INSERT INTO t2 (
- c1,
- c2,
- c3,
- c4,
- c5,
- c6,
- c7,
- c8,
- c9
- ) VALUES (
- -- 生成c1的十六进制字符串
- v_hex_string,
- -- 随机生成tinyint值(例如,范围从0到255)
- FLOOR(RAND() * 256),
- -- 生成c3的随机字符串(也可以是十六进制,这里仅作示例)
- LPAD(LOWER(REPLACE(UUID(), '-', '')), 32, '0'),
- -- 随机生成tinyint值
- FLOOR(RAND() * 256),
- -- 生成c5的十六进制字符串
- v_hex_string,
- -- 随机生成bigint值
- FLOOR(RAND() * POW(2, 63)),
- -- 随机生成bigint值
- FLOOR(RAND() * POW(2, 63)),
- -- 随机生成double值
- RAND(),
- -- 随机生成bigint值
- FLOOR(RAND() * POW(2, 63))
- );
-
- SET v_counter = v_counter + 1;
- END WHILE;
-
- END;;
- DELIMITER ;
-
- CALL GenerateTestData();
由于PolarDB-X对MySQL的语法兼容都非常高,我们无需对生成结果进行修改,直接粘贴到PolarDB-X中即可执行:
喝一杯茶,我们的测试数据就创建完成了:
欢迎关注,我们会带给大家更多PolarDB-X的最佳实践!
数据库PolarDB-X新人入门一站式页面,快速体验集中分布式一体化新特性!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。