文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

又一个选择PostgreSQL的理由:单表1亿性能对比

2024-11-30 07:14

关注

准备

建表语句:

CREATE TABLE user_mysql / user_postgresql (
                                 id SERIAL PRIMARY KEY,
                                 username VARCHAR(50),
                                 email VARCHAR(100),
                                 password VARCHAR(100),
                                 first_name VARCHAR(50),
                                 last_name VARCHAR(50),
                                 address VARCHAR(200),
                                 city VARCHAR(50),
                                 state VARCHAR(50),
                                 zip_code VARCHAR(10),
                                 country VARCHAR(50),
                                 phone_number VARCHAR(50),
                                 date_of_birth DATE,
                                 gender VARCHAR(10),
                                 occupation VARCHAR(100),
                                 education_level VARCHAR(50),
                                 registration_date TIMESTAMP,
                                 last_login TIMESTAMP,
                                 is_active BOOLEAN,
                                 is_admin BOOLEAN,
                                 additional_field1 VARCHAR(100),
                                 additional_field2 VARCHAR(100)
);

接下来记录一下相关数据。

1.插入耗时

2.count(*)耗时

MySQL:45 s 877 ms,明细如下:

mydatabase> select count(*) from user_mysql
[2023-09-26 22:22:24] 1 row retrieved starting from 1 in 45 s 877 ms (execution: 45 s 767 ms, fetching: 110 ms)

PostgreSQL:8 s 169 ms,明细如下:

postgres.public> select count(*) from user_postgresql
[2023-09-26 22:24:08] 1 row retrieved starting from 1 in 8 s 169 ms (execution: 8 s 133 ms, fetching: 36 ms)

1亿数据量

3.根据主键查询数据

MySQL:47 ms,明细如下:

mydatabase> select * from user_mysql where id = 19279833
[2023-09-26 22:28:10] 1 row retrieved starting from 1 in 47 ms (execution: 16 ms, fetching: 31 ms)

PostgreSQL:46 ms,明细如下:

postgres.public> select * from user_postgresql where id = 19279833
[2023-09-26 22:29:51] 1 row retrieved starting from 1 in 46 ms (execution: 15 ms, fetching: 31 ms)

4.根据username查询(无索引)

MySQL:1 m 56 s 986 ms,明细如下:

// 查询第99279833行数据
mydatabase> select * from user_mysql where username = '10190439674'
[2023-09-26 22:36:09] 1 row retrieved starting from 1 in 1 m 56 s 986 ms (execution: 1 m 56 s 939 ms, fetching: 47 ms)

PostgreSQL:38 s 73 ms,明细如下:

// 同样查询第99279833行数据
postgres.public> select * from user_postgresql where username = '14998727834'
[2023-09-26 22:38:25] 1 row retrieved starting from 1 in 38 s 73 ms (execution: 38 s 18 ms, fetching: 55 ms)

5.创建索引耗时

MySQL创建B+TREE索引:5 m 31 s 276 ms,明细如下:

mydatabase> ALTER TABLE user_mysql ADD INDEX idx_name (username)
[2023-09-26 22:47:37] completed in 5 m 31 s 276 ms

PostgreSQL创建B-TREE索引:9 m 20 s 847 ms,明细如下:

postgres.public> CREATE INDEX idx_name ON user_postgresql (username)
[2023-09-26 22:57:59] completed in 9 m 20 s 847 ms

6.根据username查询(有索引)

MySQL:93 ms,明细如下:

// 查询第99279833行数据
mydatabase> select * from user_mysql where username = '10190439674'
[2023-09-26 23:01:48] 1 row retrieved starting from 1 in 93 ms (execution: 0 ms, fetching: 93 ms)

PostgreSQL:63 ms,明细如下:

// 同样查询第99279833行数据
postgres.public> select * from user_postgresql where username = '14998727834'
[2023-09-26 23:00:07] 1 row retrieved starting from 1 in 63 ms (execution: 0 ms, fetching: 63 ms)

7.根据username修改(有索引)

MySQL:16 ms,明细如下:

mydatabase> update user_mysql set email='myemail' where username = '10190439674'
[2023-09-26 23:06:05] 1 row affected in 16 ms

PostgreSQL:15 ms,明细如下:

postgres.public> update user_postgresql set email='myemail' where username = '14998727834'
[2023-09-26 23:07:13] 1 row affected in 15 ms

8.分页查询(不加条件)

MySQL:1 m 40 s 265 ms,明细如下:

mydatabase> select * from user_mysql limit 89999980, 20
[2023-09-26 23:10:54] 20 rows retrieved starting from 1 in 1 m 40 s 265 ms (execution: 1 m 40 s 234 ms, fetching: 31 ms)

PostgreSQL:27 s 750 ms,明细如下:

postgres.public> select * from user_postgresql limit 20 offset 89999980
[2023-09-26 23:12:32] 20 rows retrieved starting from 1 in 27 s 750 ms (execution: 27 s 688 ms, fetching: 62 ms)

9.分页查询(加条件,条件为索引)

MySQL:94 ms,明细如下:

mydatabase> select * from user_mysql where id >= 89999980 limit 20
[2023-09-26 23:13:34] 20 rows retrieved starting from 1 in 94 ms (execution: 0 ms, fetching: 94 ms)

PostgreSQL:78 ms,明细如下:

postgres.public> select * from user_postgresql where id >= 89999980 limit 20
[2023-09-26 23:14:12] 20 rows retrieved starting from 1 in 78 ms (execution: 0 ms, fetching: 78 ms)

总结

在数据量达到1亿时,数据库操作的开销都会比较大,尤其是不走索引的操作和DDL操作等。因此在生产环境时,不建议数据量太大,数据库特别大的情况下,建议使用更强大的数据库,不建议分表分库。对大表进行DDL操作时也需要谨慎操作。

声明:这些数据均为本机测试,并未用专业测试软件测试,仅供参考。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯