存储过程练习

本文介绍了如何设计一个包含主键和其他字段的员工数据表,并使用存储过程模拟插入五百万条随机数据,同时为部分字段创建索引。接着,展示了如何通过存储过程将数据表按主键id字段进行分表,拆分成5个子表,每个子表包含1000000条数据,以优化查询效率。
摘要由CSDN通过智能技术生成

需求1:设计一个数据表,包括1个主键id字段和至少其它4个字段,使用存储过程模拟随机插入五百万条数据,其中部分字段设置索引。

员工表:id、姓名(有索引)、性别、年龄(有索引)、地址;

插入数据存储过程SQL语句:

DELIMITER $$
CREATE PROCEDURE `sofware_development`.`insert_employee` (IN maxINT INT) 
BEGIN
  DECLARE i INT DEFAULT 0 ;
  DECLARE v INT DEFAULT 0 ;
  START TRANSACTION ;
  WHILE
    i < maxINT DO 
    SELECT 
      RAND() * 100 INTO v ;
    INSERT INTO t_employee (id, NAME, age, address, gender) 
    VALUES
      (
        i,
        CONCAT('name', i),
        v,
        CONCAT('address', i),
        FLOOR(RAND() * 2)
      ) ;
    SET i = i + 1 ;
  END WHILE ;
  COMMIT ;
END $$
DELIMITER ;

调用存储过程:

CALL insert_employee(5000000);

需求2:按 t_employee 表中 id 字段进行分表,拆分成 5 个子表;并创建存储过程,将主表的数据插入到 5 个子表中,每个子表中有 1000000 条数据。

DELIMITER $$
CREATE PROCEDURE `sofware_development`.`exe_sql`(IN sqlVar VARCHAR(4096))
    BEGIN
        SET @v_s = sqlVar;
	PREPARE stmt FROM @v_s;
	EXECUTE stmt;
	DEALLOCATE PREPARE stmt;
    END$$
DELIMITER ;
DELIMITER $
CREATE PROCEDURE `divide_table`(IN tableNamePrefix VARCHAR(1024), IN tableNum INT, IN whereField VARCHAR(128))
BEGIN
	DECLARE sqlVar VARCHAR(4096);
	DECLARE tableName VARCHAR(128);
	DECLARE i INT DEFAULT 0;
	WHILE i < tableNum DO
    SET tableName = CONCAT(tableNamePrefix, '_', i);
    SET sqlVar = CONCAT('CREATE TABLE IF NOT EXISTS ', tableName, ' LIKE ', tableNamePrefix);
    CALL exe_sql(sqlVar);
    SET sqlVar = CONCAT('INSERT INTO ',tableName,' SELECT * FROM ',tableNamePrefix,' where ',whereField,' % ',tableNum,'=',i);
    CALL exe_sql(sqlVar);
    SET i = i + 1;
	END WHILE;
END$
DELIMITER ;

注:tableNamePrefix 是主表表;tableNum 是分表的数量;whereField 是按哪个字段分表;

调用分表存储过程:

CALL divide_table('t_employee', 5, 'id');

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值