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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
12天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
44 15
|
20天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
121 1
|
23天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
90 4
|
1月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
401 2
|
1月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
9天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
38 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
240 7
Jmeter实现WebSocket协议的接口测试方法