当前位置: 首页 > news >正文

快速生成mysql测试数据10w条

场景

需要拿10w条数据测试数据库的性能优化,查看是否合理。之前有的项目数据量很小,后面遇到大的项目难免吃亏。遂决定进行此次测试。

使用环境:

win10

使用工具:

mysql workbench --mysql官网自带的IDE,可以用dbeaver等替换

powershell --同理,cmd也可以

deepseek --搜索报错

思路

此次会使用Python脚本test.py生成测试数据文件test_data.csv,然后使用导入文件命令导入mysql数据到mysql容器中。

【 相对insert单条输入和事务输入,文件导入效率更高】

使用步骤:

1. 安装python

win10 测试是否安装python3,powershell输入python, 

有会显示python版本,没有会自动跳出微软商店安装python

下图为输入后显示的版本:

2.放入python脚本

保存为test.py 【此处方便测试,我放在桌面位置,大家可以随便放】

import csv
import random
from datetime import datetime, timedelta
from faker import Faker

# 初始化Faker库
fake = Faker('zh_CN')

# 预定义的创建人和更新人列表
creators = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十']
updaters = creators + ['系统自动', '管理员', '自动任务']

# 生成随机日期(过去5年内)
def random_date(start_date=None):
    if start_date is None:
        start_date = datetime.now() - timedelta(days=5*365)
    end_date = datetime.now()
    return start_date + timedelta(seconds=random.randint(0, int((end_date - start_date).total_seconds())))
    
# 生成10万条测试数据
def generate_test_data(num_records=100000):
    data = []
    for i in range(num_records):
        # 生成创建日期(确保更新日期不早于创建日期)
        create_date = random_date()
        update_date = random_date(create_date)
        
        record = {
            'ID': i + 1,
            '姓名': fake.name(),
            '年龄': random.randint(1, 100),
            '创建日期': create_date.strftime('%Y-%m-%d %H:%M:%S'),
            '创建人': random.choice(creators),
            '更新日期': update_date.strftime('%Y-%m-%d %H:%M:%S'),
            '更新人': random.choice(updaters)
        }
        data.append(record)
    return data

# 保存为CSV文件
def save_to_csv(data, filename='test_data.csv'):
    with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile:
        fieldnames = ['ID', '姓名', '年龄', '创建日期', '创建人', '更新日期', '更新人']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        
        writer.writeheader()
        writer.writerows(data)
    print(f"数据已保存到 {filename}")

# 生成并保存数据
test_data = generate_test_data(100000)
save_to_csv(test_data)

3.执行python脚本

python C:\Users\admin\Desktop\test.py --linux环境

python.exe .\test.py --win10环境

现在测试数据已经生成,

4. 打开mysqlworkbench

建表

CREATE TABLE `test_data` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',
  `age` tinyint unsigned NOT NULL COMMENT '年龄',
  `create_time` datetime NOT NULL COMMENT '创建日期',
  `creator` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人',
  `update_time` datetime NOT NULL COMMENT '更新日期',
  `updater` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更新人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='测试数据表'

4.1  点击配置

点击Advanced -> Others 里输入 OPT_LOCAL_INFILE=1

【此处不设置会报错:Error Code: 2068. LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. 在 MySQL Workbench 中遇到 Error Code: 2068LOAD DATA LOCAL INFILE 被拒绝)是因为 MySQL 默认出于安全考虑禁用了客户端本地文件加载功能。

4.2 执行

在workbench里执行

LOAD DATA LOCAL INFILE 'C:/Users/admin/Desktop/test_data.csv'  
INTO TABLE test_data  FIELDS TERMINATED BY ',' 
 ENCLOSED BY '"' LINES TERMINATED BY '\n'
 IGNORE 1 ROWS (id, name, age, create_time, creator, update_time, updater)

脚本释义

执行成功:

5.查看数据

SELECT * FROM demo.test_data;
 

select count(*) from demo.test_data;

Done.

【完结撒花】

后续可以分析测试优化性能了。例如处理全表扫描索引扫描等等,后续看时间更新吧。。。

相关文章:

  • CSP/信奥赛C++中格式化输入输出scanf和printf的使用详解
  • 快速上手示例(以BEVFormer为例)
  • 【蓝桥杯】考前冲刺!
  • Unity中的静态合批使用整理
  • Oracle 数据库中,并行 DML
  • XSLFO XSLT:深入解析两种强大的XML转换技术
  • leetcode0069. x 的平方根-easy
  • 从零构建大语言模型全栈开发指南:第五部分:行业应用与前沿探索-5.1.2行业落地挑战:算力成本与数据隐私解决方案
  • 操作系统(二):实时系统介绍与实例分析
  • PM2 在 Node.js 项目中的使用与部署指南
  • 【力扣hot100题】(047)路径总和Ⅲ
  • 如何在Android中使用匿名内部类?
  • 人工智能混合编程实践:C++调用封装好的DLL进行图像超分重建
  • MinIO 入门指南:高性能对象存储的安装与使用
  • 国内使用Claude 3.7 sonnet的6种方法及Cursor+Claude3.7实现从原型到app开发
  • 034-QSharedMemory
  • 人工智能在医疗领域的创新应用与挑战
  • HC32F460 - SPI+DMA+TFT
  • 蓝桥杯2024省赛PythonB组——日期问题
  • 【XTerminal】【树莓派】Linux系统下的函数调用编程