MySql优化系列-基础版造数据(存储过程+函数)-1
2022/2/10 19:14:02
本文主要是介绍MySql优化系列-基础版造数据(存储过程+函数)-1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- MySql优化系列-优化版造数据(存储过程+函数+修改存储引擎)-2
- 第1步:创建表结构
- 第2步:生成随机字符串函数
- 第3步定义存储过程
- 第4步:调用存储过程
- 第5步:验证造数据成功
- 思考
- 参考
MySql优化系列-优化版造数据(存储过程+函数+修改存储引擎)-2
数据作为后端开发的主体,需要对其进行一些列的操作,或增或改或删或查。高效地操作数据是程序的非功能性要求。
优化首先必得有数据,这样才好比对优化前跟优化后的效果,以判断优化是否达到目标。
第1步:创建表结构
-- 创建表 DROP TABLE IF EXISTS crm_user; CREATE TABLE `crm_user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `user_code` VARCHAR(45) NOT NULL COMMENT '用户编码', `user_name` VARCHAR(45) DEFAULT NULL COMMENT '用户名称', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_code` (`user_code`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表';
第2步:生成随机字符串函数
DELIMITER $$ DROP FUNCTION IF EXISTS rand_str$$ CREATE FUNCTION rand_str(strlen SMALLINT ) RETURNS VARCHAR(255) BEGIN DECLARE randStr VARCHAR(255) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; DECLARE i SMALLINT DEFAULT 100; DECLARE resultStr VARCHAR(255) DEFAULT ''; SET i = IF(strlen > 0,strlen,i); WHILE i > 0 DO SET resultStr=CONCAT(SUBSTR(randStr,FLOOR(RAND()*LENGTH(randStr))+1,1),resultStr); SET i=i-1; END WHILE; RETURN resultStr; END $$
第3步定义存储过程
这里做了一个取巧,即用INSERT INTO IGNORE方式插入,毕竟有唯一索引的约束。当然也可以通过先插入,然后在去重,最后在增加唯一索引的方式。
-- 创建存储过程 DROP PROCEDURE IF EXISTS generateCrmUser; -- 将语句的结束符号从分号;临时改为两个$$(可以是自定义) DELIMITER $$ CREATE PROCEDURE generateCrmUser() BEGIN DECLARE num INT; SET num = 1; SET autocommit=0; SET unique_checks=0; WHILE num < 50000 DO INSERT IGNORE INTO `crm_user_50w` ( user_code, user_name ) VALUES((SELECT rand_str(12) FROM DUAL),(SELECT rand_str(12) FROM DUAL)); SET num = num + 1; END WHILE; SET autocommit=1; SET unique_checks=1; END$$ DELIMITER ;
第4步:调用存储过程
-- 调用存储过程 CALL generateCrmUser();
第5步:验证造数据成功
-- 查看条数 SELECT COUNT(*) FROM crm_user;
思考
- 能否利用mysql存储引擎的特点来优化这个工程。即MYISAM插入比较快,MEMORY更快,先用其它引擎造数据,然后更改存储引擎为INNODB。
1. 存储引擎用MEMORY内存容易满,只适合造小批量数据(或者在存储过程里面做逻辑)。报错示例如下: 错误代码: 1114 The table 'crm_user_50w' is full 2. 用MYIASM通用性强一些,不过竞争压力不强的情况下,情况不见得有比INNODB快,但是一般来说没有MYISAM没有事务理论上插入要快一些。
参考
- mysql 存储过程演示造数据
- MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据
这篇关于MySql优化系列-基础版造数据(存储过程+函数)-1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程