对于简单的等式检查 ( =
),avarchar
或text
列上的 B-Tree 索引很简单并且是最佳选择。它肯定对性能有很大帮助。
当然,简单的 B-Tree 索引integer
性能更好。对于初学者来说,比较简单integer
的值要快一些。但更重要的是,性能也是索引大小的函数。更大的列意味着每个数据页的行数更少,意味着必须读取更多的页面......
因为HomeAddress
无论如何都不是唯一的,所以它不是一个好的自然主键。我强烈建议改用代理主键。列serial
是明显的选择。它的唯一目的是使用一个简单、快速的主键。
如果您有其他表引用所述表,这将变得更加有效。而不是为外键列复制一个冗长的字符串,您只需要一个整数列的 4 个字节。而且您不需要级联更新这么多,因为地址必然会更改,而代理 pk 可以保持不变(但当然不是必须)。
您的表格可能如下所示:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
这会产生两个 B-Tree 索引。上的唯一索引resident_id
和上的普通索引address
。
更多关于手册中的索引。
Postgres 提供了很多选项——但是对于这个简单的案例,你不再需要了。