我们在测试数据库性能的过程中,通常需要生成一批测试数据。
以前,一般要写一段程序或者脚本来完成这项工作,但现在是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的最佳实践!
作者:梦实
原文链接:https://developer.aliyun.com/article/1458381?utm_content=g_1000392134
本文为阿里云原创内容,未经允许不得转载。