【发布时间】:2016-10-29 10:42:27
【问题描述】:
我想提高我的数据库性能。在一个项目中,所有表都从int 变为bigint,我认为这不仅在存储方面是一个糟糕的选择,因为int 需要4 bytes,而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 表的方式:
-- 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
我的基准测试有问题吗? int 不应该比 bigint 快吗?特别是,当 primary key 定义为 index 时,这意味着为 bigint 创建索引将比为 int 创建索引慢,具有相同的数据量对吧?
我知道这不仅仅是一件小事,会对我的数据库的性能产生巨大影响,但我想确保我们使用最佳实践并在这里专注于性能。
【问题讨论】:
标签: performance postgresql int sqldatatypes bigint