postgresql | 数据库| 生成2000W条的简单测试表

简介: postgresql | 数据库| 生成2000W条的简单测试表

前言:

数据库学习的过程中,很可能需要数据量比较大的表来进行模拟测试,那么,测试表的创建需要遵循的是贴近实际的生产环境,尽量的模仿实际的生产环境。

因此,学习数据库的时候,快速的创建一个具有足够数据量的大表是非常有必要的。

OK,本文将就如何创建一个数量级达到2000W的单表做一个详细的介绍。

一,

创建表用到的函数

  • generate_series(1,20000000)

自增序列函数,主要功能是输出一个连续的序列号,示例如下:

postgres=# select generate_series(1,10);
 generate_series 
-----------------
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
(10 rows)
####注意,此命令和上面是一样的select *  from generate_series(1,10);

使用说明:

可以使用时间作为参数生成时间序列

generate_series(start, stop,step)生成一个数值序列,从start 到 stop,步进为 step
  • lpad()

填充字符函数

lpad(string, length, characters)
参数
str
必需的。 需要填充的字符串。
length
必需的。 需要填充到的字符串长度。
characters
可选的。 用来填充的字符。默认是一个空格。

例如:

SELECT lpad('hellozsk', 12, 'world');

输出是:

postgres=# SELECT lpad('hellozsk', 12, 'world');
     lpad     
--------------
 worlhellozsk
(1 row)

为什么是这么输出呢?左边hellozsk是8位,右边是5位,指定输出12位,差4位,从右边借4位放到hellozsk的左边,从而输出worlhellozsk

顺便说一下,还有rpad函数,两个是一对的,示例如下:

postgres=# SELECT rpad('hellozsk', 12, 'world');
     rpad     
--------------
 hellozskworl
(1 row)
postgres=# select * from rpad('hello',10,'world');
    rpad    
------------
 helloworld
(1 row)
  • random()
postgres=# select * from random();
       random       
--------------------
 0.5445090305686442
(1 row)

二,

随机生成23位数字加字母的自定义函数

create or replace function gen_id(  
 a date,  
 b date  
)   
returns text as $$  
select lpad((random()*99)::int::text, 3, '0') ||   
    lpad((random()*99)::int::text, 3, '0') ||   
    lpad((random()*99)::int::text, 3, '0') ||   
    to_char(a + (random()*(b-a))::int, 'yyyymmdd') ||   
    lpad((random()*99)::int::text, 3, '0') ||   
    random()::int ||   
    (case when random()*10 >9 then 'xy' else (random()*9)::int::text end ) ;  
$$ language sql strict;

三,

创建测试表

create table if not exists testpg (
  "id" int,
  "suijishuzi" VARCHAR ( 255 ) COLLATE "pg_catalog"."default"
);
#或者创建这个表
CREATE SEQUENCE test START 1;
create table if not exists testpg (
  "id" int8 not null DEFAULT nextval('test'::regclass),
  CONSTRAINT "user_vendorcode_pkey" PRIMARY KEY ("id"),
  "suijishuzi" VARCHAR ( 255 ) COLLATE "pg_catalog"."default"
);

四,

向测试表插入数据,暂定是2000W条:

insert into testpg SELECT generate_series(1,20000000) as xm, gen_id('1949-01-01', '2023-10-16') as num;

插入数据的速度看CPU是否给力了,反正我的笔记本是比较差劲,因此十来分钟才生成完

测试表的简单使用

#####注:为什么是使用navicat?因为navicat通常是远程连接的数据库,是可以真实模拟数据库使用的,在本地查询速度会快很多的。

1,

快速查询

select * from testpg where id between 10012 and 52013 limit 1000;

2,

慢速查询

select * from testpg where id between 10012 and 52013

3,

给ID列增加索引,然后无limit查询:

可以看到加索引后查询速度增加了30多倍,由15秒左右变为0.3秒左右

create index on testpg(id);
select * from testpg where id between 10012 and 52013 ;

未完待续!!!!

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
785 152
|
3月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
3月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
6月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
495 62
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
4月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
392 0
|
6月前
|
存储 关系型数据库 分布式数据库
【赵渝强老师】基于PostgreSQL的分布式数据库:Citus
Citus 是基于 PostgreSQL 的开源分布式数据库,采用 shared nothing 架构,具备良好的扩展性。它以插件形式集成,部署简单,适用于处理大规模数据和高并发场景。本文介绍了 Citus 的基础概念、安装配置步骤及其在单机环境下的集群搭建方法。
522 2
|
11月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1028 23
|
8月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1245 24

推荐镜像

更多