我想创建一个简单的程序,用一些随机值填充MySQL数据库表10 000次。我想用两个引擎InnoDB(它是标准的面向行的引擎)和InfiniDB(指定的面向列的引擎)来测试插入和读取表的速度。知道怎么做吗? 这是我数据库中其中一个表的示例:
CREATE TABLE IF NOT EXISTS `mydb`.`tblVariable` (
`idtblVariable` INT NOT NULL ,
`name` VARCHAR(20) NULL ,
`station_id` INT NULL ,
`description` VARCHAR(100) NULL ,
`id_history` INT NOT NULL DEFAULT 0 ,
`type` ENUM('Analog','Digital') NOT NULL
)
所以要解释..对于idtblVariable,这个数字将从1到10 000随机 名称可以是:PT1,...,PT10000 例如,描述将只是:a,a,a,a,10000次 等等 客户端是程序,插入和读取在C#中有表格,经典应用。这可以在批处理程序中完成吗?
答案 0 :(得分:3)
这是一个将数字从1填充到10000的其他技巧。如果你创建一个临时表或一个表变量,并用0到9之间的数字填充它,如下所示:
CREATE TABLE TEMP
(Digit int);
INSERT INTO Temp VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
然后您可以生成1到10000之间的数字,如下所示:
INSERT INTO tblVariable (idtblVariable)
SELECT id
FROM
(
SELECT t4.digit * 1000 + t3.digit * 100 + t2.digit * 10 + t1.digit + 1 AS id
FROM TEMP AS t1
CROSS JOIN TEMP AS t2
CROSS JOIN TEMP AS t3
CROSS JOIN TEMP AS t4
) t
答案 1 :(得分:1)
这可以通过存储过程完成,例如:
CREATE DEFINER = `root`@`localhost` PROCEDURE `NewProc`()
BEGIN
#Routine body goes here...
DECLARE counter INT;
DECLARE i INT;
SET i = 0;
SET counter = 10000;
WHILE i < counter DO
INSERT INTO tblVariable (idtblVariable, name, /*Other fields*/)
VALUES (i, CONCAT('PT',i), /*Other values*/);
SET i = i + 1;
END WHILE;
END;
如果您遇到MySQL权限问题,可以删除/更新部分DEFINER =
root @
localhost。
UPDATE :然后,在创建存储过程之后,您可以调用以下过程:
CALL NewProc;