我想提高数据库性能。在一个项目中,所有表从int
到bigint
,我认为这不仅是关于存储的不错选择,因为int
要求4 bytes
和bigint
要求8 bytes
;而且关于性能。 所以我在Python:
基准测试:PostgreSQL上的bigint vs int
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))
创造了一个小桌子与10个百万条目,一个脚本这是我创造了我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
,具有相同的数据量,对不对?
我知道这不仅仅是一件小事,会对我的数据库性能产生巨大影响,但我希望确保我们正在使用最佳实践并专注于性能。
嗨@klin,我得到了这个结果'76; 76; 22; 22';你介意澄清一下吗? –
谢谢@klin! –
@klin你似乎在许多地方使用“位”而不是“字节”这个词。 – YeB