我想提高數據庫性能。在一個項目中,所有表從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