基准测试:PostgreSQL 上的 bigint 与 int

2024-06-26

我想提高数据库性能。在一个项目中,所有表都来自int to bigint,我认为这不仅在存储方面是一个糟糕的选择,因为int需要4 bytes, and bigint需要8 bytes;但也与性能有关。 所以我创建了一个小表1000万条目,其中有一个脚本Python:

import uuid

rows=10000000

output='insert_description_bigint.sql'
f = open(output, 'w')

set_schema="SET search_path = norma;\n"
f.write(set_schema)

for i in range(1,rows):
    random_string=uuid.uuid4()
    query="insert into description_bigint (description_id, description) values (%d, '%s'); \n"
    f.write(query % (i,random_string))

这就是我创建我的two tables:

-- BIGINT

DROP TABLE IF EXISTS description_bigint;

CREATE TABLE description_bigint
(
  description_id BIGINT PRIMARY KEY NOT NULL,
  description VARCHAR(200),
  constraint description_id_positive CHECK (description_id >= 0)
);

select count(1) from description_bigint;
select * from description_bigint;
select * from description_bigint where description_id = 9999999;

-- INT

DROP TABLE IF EXISTS description_int;

CREATE TABLE description_int
(
  description_id INT PRIMARY KEY NOT NULL,
  description VARCHAR(200),
  constraint description_id_positive CHECK (description_id >= 0)
);

插入所有这些数据后,我对两个表进行查询,以测量它们之间的差异。令我惊讶的是,它们都有相同的性能:

select * from description_bigint; -- 11m55s
select * from description_int; -- 11m55s

我的基准测试有问题吗?不应该intbigint?特别是,当primary key根据定义是index这意味着,为bigint将会slower而不是为其创建索引int,具有相同数量的数据,对吧?

我知道这不仅仅是一件小事,会对我的数据库性能产生巨大影响,但我想确保我们使用最佳实践并专注于性能。


在 64 位系统中,这两个表几乎相同。专栏description_id in description_int覆盖 8 个字节(4 个字节用于整数,4 个字节用于对齐)。试试这个测试:

select 
    pg_relation_size('description_int')/10000000 as table_int, 
    pg_relation_size('description_bigint')/10000000 as table_bigint,
    pg_relation_size('description_int_pkey')/10000000 as index_int,
    pg_relation_size('description_bigint_pkey')/10000000 as index_bigint;

两个表的平均行大小实际上是相同的。这是因为整数列占用 8 个字节(4 个字节用于值,4 个字节对齐),与 bigint(8 个字节用于没有填充符的值)完全相同。这同样适用于索引条目。然而,这是一个特殊情况。如果我们在第一个表中再添加一个整数列:

CREATE TABLE two_integers
(
  description_id INT PRIMARY KEY NOT NULL,
  one_more_int INT,
  description VARCHAR(200),
  constraint description_id_positive CHECK (description_id >= 0)
);

平均行大小应保持不变,因为前 8 个字节将用于两个整数(无填充符)。

查找更多详细信息PostgreSQL 中的计算和节省空间 https://stackoverflow.com/questions/2966524/calculating-and-saving-space-in-postgresql/7431468#7431468.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基准测试:PostgreSQL 上的 bigint 与 int 的相关文章

  • 基准测试:PostgreSQL 上的 bigint 与 int

    我想提高数据库性能 在一个项目中 所有表都来自int to bigint 我认为这不仅在存储方面是一个糟糕的选择 因为int需要4 bytes and bigint需要8 bytes 但也与性能有关 所以我创建了一个小表1000万条目 其中
  • 我应该测试是否等于 1 还是不等于 0?

    前几天我在这里编码 写了几个 if 语句 其中的整数总是要么0 or 1 实际上充当bools 我问自己 当检测结果呈阳性时 哪个更好 测试int 1 or int 0 例如 给定一个 intn 如果我想测试是否是true 我应该使用n 1
  • Haskell 乘加运算的数学性能

    我正在用 Haskell 编写一个游戏 我当前在 UI 上的传递涉及大量几何图形的程序生成 我目前专注于识别一项特定操作的性能 C ish 伪代码 Vec4f multiplier addend Vec4f vecList for int
  • 为什么 justify_interval('360 days'::interval) 结果 '1 年'

    因为某些原因justify interval now 2013 02 14 timestamptz 产生奇怪的结果 postgres select justify interval concat 365 4 1 days interval
  • 具有位变化的 PostgreSQL 位运算符“不能与不同大小的位字符串”

    我有一个变化的位掩码字段 我想对其执行按位与操作 PG Error ERROR cannot AND bit strings of different sizes SELECT groups FROM groups WHERE read r
  • PostgreSQL - 返回多列的函数

    这是一个提供 2 列结果的函数 在这个函数中有一个Loop被用来返回结果 功能 Create Type Repeat rs as label text count bigint CREATE OR REPLACE FUNCTION Repe
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav
  • 使用“var”会影响性能吗?

    早些时候我问了一个关于为什么我看到这么多例子使用varkeyword https stackoverflow com questions 335682 mvc examples use of var并得到的答案是 虽然它只对匿名类型是必要的
  • 需要访问tableView中的单元格:heightForRowAtIndexPath:

    我需要从以下位置访问表格中的单元格tableView heightForRowAtIndexPath 因为我想使用自定义单元格上的数据进行高度计算 我发现获取细胞的唯一方法是打电话tableView cellForRowAtIndexPat
  • Python postgreSQL sqlalchemy 查询 DATERANGE 列

    我有一个预订系统 并将预订日期范围保存在 日期范围 列中 booked date Column DATERANGE nullable False 我已经知道我可以通过以下方式访问实际日期booked date lower or booked
  • 为什么 C++ 中的整数数组搜索循环比 Java 慢?

    我用 C 和 Java 编写了相同的程序 对于 C 我使用 VS 2019 对于 Java 我使用 Eclipse 2019 03 这是 C 程序 define InputSize 500000 int FindDuplicate Find
  • 双等号 (==) 和三等号 (===) 之间的 JavaScript 性能差异

    在 JavaScript 中 使用双等号 与使用三等号 例子 if foo bar vs if foo bar 如果比较的类型相同 它们是相同的 也就是说他们用完全相同的算法 如果类型是不同的 那么性能就无关紧要了 您要么需要类型强制 要么
  • C#:虚拟函数调用比委托调用更快?

    我刚刚遇到了一个代码设计问题 比如说 我有一个 模板 方法 它调用一些可能 改变 的函数 一个直观的设计就是遵循 模板设计模式 将更改函数定义为要在子类中重写的 虚拟 函数 或者 我可以只使用委托函数而不使用 虚拟 委托函数被注入 以便它们
  • Heroku: PG::ConnectionBad: 无法连接到服务器: 连接被拒绝

    我尝试将新应用程序推送到 heroku 并出现此错误PG ConnectionBad could not connect to server Connection refused 这是我的 gemfile 与此有关系吗 我正在使用 spre
  • 在 postgresql 上使用 sql 查询更新 xml 数据

    我有 XML 数据需要更新 而我只有 SQL 查询来执行此操作 如何做到这一点 I used UPDATE TABLE SET ARCH XML DATA WHERE name xxx 但是当将 XML 代码粘贴到 shell 上时 它会进
  • 在 Javascript 中实现 Zobrist 哈希

    我需要在 Javascript 中为国际象棋引擎实现 Zobrist 哈希 我想知道实现此目的的最佳方法是什么 现在 我不是计算机科学家 也从未上过正式的算法和数据结构课程 所以如果我在这方面有点偏离 我很抱歉 据我了解 我需要一个 64
  • Java Reflection:为什么这么慢?

    我一直避免使用 Java 反射 因为它速度缓慢 我在当前项目的设计中达到了一个点 能够使用它将使我的代码更具可读性和优雅性 所以我决定尝试一下 我只是对这种差异感到惊讶 我注意到有时运行时间几乎延长了 100 倍 即使在这个简单的例子中 它
  • 训练某些网络时,Keras(Tensorflow 后端)在 GPU 上比在 CPU 上慢

    我很难理解为什么 GPU 和 CPU 速度在小规模网络中相似 CPU 有时更快 而 GPU 在大规模网络中更快 问题底部的代码在 i7 6700k 上运行时间为 103 7 秒 但使用tensorflow gpu 时 代码运行时间为 29
  • 在一个命令中选择或插入一行

    我使用的是 PostgreSQL 9 0 我有一个表 其中只有一个人工键 自动递增序列 和另一个唯一键 是的 这个表是有原因的 我想通过另一个键查找 ID 或者如果它不存在 则插入它 SELECT id FROM mytable WHERE

随机推荐

  • Cmake:在自定义目录中查找 protobuf 包

    我有 cmake 3 10 x 并下载了当前的 protobuf 源 3 6 1 使用 cmake 我创建了 bin 目录 PROTOBUF SOURCE DIR bin 在其中成功构建了该库 下一步我想在我的基于 cmake 的项目中使用
  • 在 Jenkins 服务器上找不到 tcpSlaveAgentListener

    我正在尝试从从机连接到 Jenkins 主实例 从连接的角度来看 一切看起来都很好 我可以在 Jenkins 的 配置全局安全性 中设置选定的 JNLP 代理的 TCP 端口 从那里启动从节点 curl http myjenkinsurl
  • 在方法签名中使用 new 关键字通常只是为了可读性吗?

    我读过关于new关键词在方法签名中并看到了下面的例子this https stackoverflow com questions 1014295 c sharp new keyword in method signature发帖了 但还是不
  • 连接到 Amazon EC2 实例时 SSH 挂起

    我可以使用以下命令连接到 ec2 实例 但今天我无法使用它进行连接 ssh i abcKey pem email protected cdn cgi l email protection v 以下是详细内容 我已经在 EC2 中打开了 SS
  • Java 中使用 PBKDF2 进行密码验证

    我正在用 Java 进行基于密码的文件加密 我使用 AES 作为底层加密算法PBKDF2WithHmacSHA1使用以下代码从盐和密码组合中派生密钥 我从本网站上的另一位慷慨的海报获得 SecretKeyFactory f SecretKe
  • 聚类算法采用哪种编程结构

    我正在尝试实现以下 分裂 聚类算法 下面是该算法的简短形式 完整的描述可用here https dl dropboxusercontent com u 540963 diana pdf 从样本 x i 1 n 开始 将其视为由 n 个数据点
  • 如何在 Android Q 上将照片广播到图库

    我使用这些代码拍照并将照片广播到画廊 它有效 我发现我的广播功能使用MediaStore Images ImageColumns DATA and Intent ACTION MEDIA SCANNER SCAN FILE 并且这些已被弃用
  • python 日志记录:当级别 >= ERROR 时,通过电子邮件将整个日志文件作为附件发送

    我的日志系统有一些处理程序 日志文件 INFO 电子邮件处理程序 gt ERROR 和用于可选调试的流处理程序 当发生错误 异常 关键消息时 我希望电子邮件处理程序将日志文件从文件处理程序附加到错误电子邮件 import logging d
  • Java中C是A的子类时“C c = new C()”和“A c = new C()”的区别

    假设我们有类 A 作为父类 以及扩展它的类 C class A void m System out println A m class C extends A Override void m System out println C m 和
  • 我如何在 WPF 中模仿这种行为?

    我对 WPF 和 C 开发相当陌生 我正在制作这个应用程序 我不知道是否有人熟悉 VOIP App Discord 但他们有一个我非常喜欢的特定行为 并且想尝试使用 WPF 创建类似的风格 当您在 Discord 上添加服务器时 单击一个按
  • 重定向后丢失会话变量

    用户填写用户名和密码 如果正确 页面会加载一些信息 例如user id到会话变量 该脚本制作了一个header Location 重定向 不知何故 下一页无法识别会话 怎么会 重定向到同一个域 并且所有页面都有session start 我
  • 将 div 移动到 dom 中的其他位置

    以下代码被动态插入到 DOM 中 但是 我想将 div example 从原来的位置移动并将其添加到 wrapper 前面 我如何使用 jQuery 来实现这一目标 div div div div div div div div I tri
  • ruby require 问题(与 $LOAD_PATH 有关)

    我正在尝试使用我刚刚安装的 gem 通过sudo gem install excelsior 像这样 需要 红宝石 要求 精益求精 这在 irb 中工作得很好 但是当我将完全相同的代码粘贴到 rb 文件中并尝试使用 ruby 运行它时 我得
  • 实体框架 4 将订单链接到拥有 10,000 个订单的客户非常慢

    这个把我难住了 我有一个客户和订单实体 客户可以有多个订单 当我创建新订单并设置 Customer 属性 Order Customer customer 时 如果客户有 10 000 个订单 则会有很长的延迟 20 秒 在添加这个新订单之前
  • Angular 5 服务中的窗口对象

    我有 Angular 项目 具体来说是用户面板 所有页面都是 php 的 只有面板是 Angular 的 如何使用window服务中的对象 我想用window location与 HTML 中的 href 完全相同的操作 它使我返回到主站点
  • Grails 4“静态类型检查”错误仅适用于日期对象[重复]

    这个问题在这里已经有答案了 所以我从 Grails 3 3 x 迁移到 4 0 13 当我尝试编译我的应用程序时 当我尝试使用format任何 Date 属性的方法 例如 class Event Date startDateTime Dat
  • 从 Xcode 中的 OSX 模拟器删除应用程序

    如何像在 iOS 模拟器上一样从 OSX 模拟器中删除应用程序 由于核心数据 xcdatamodeld 的更改 我想删除一个应用程序 但我找不到方法 提前致谢 对于 macOS Monterey 和 Big Sur 该位置链接到设备文件夹位
  • SonarQube 是 Checkstyle、PMD、FindBugs 的替代品吗?

    我们正在从头开始开发一个 Web 项目 并正在研究以下静态代码分析工具 约定 Checkstyle 不良做法 PMD 潜在的错误 FindBugs 该项目是基于 Maven 构建的 我没有使用多个工具来实现此目的 而是寻找一个灵活的解决方案
  • 找到每个元素的所有父元素

    我正在尝试创建一个面包屑而不使用 url 路由提供者 并且不使用 jQuery 我有一棵这样的树 Humans Trees Animals Cats Lions Dogs Terrier Bulldog Cocker Cars 我希望当我点
  • 基准测试:PostgreSQL 上的 bigint 与 int

    我想提高数据库性能 在一个项目中 所有表都来自int to bigint 我认为这不仅在存储方面是一个糟糕的选择 因为int需要4 bytes and bigint需要8 bytes 但也与性能有关 所以我创建了一个小表1000万条目 其中