2012-01-17 29 views
1

我正在设计一个在PostgreSQL上运行的数据库布局。在这个数据库中,我需要处理很多地址,所以我自然希望使用地址表,然后让我的其他数据指向主键。PostgreSQL大型表SELECT/INSERT性能?

我希望地址是唯一的,所以我打算使用一个简单的主键,然后在所有数据列上使用唯一索引。

沿着这个东西线:

CREATE TABLE address(id serial NOT NULL, name VARCHAR(32), address1 VARCHAR(32), address2 VARCHAR(32), postal VARCHAR(12), city VARCHAR(64), CONSTRAINT pkey PRIMARY KEY (id), CONSTRAINT unq UNIQUE (name,address1,address2,postal,city)); 

我预计会有从一开始就在此表以及超过200万个条目。

该表将被很多同时选择和一些插入命中。但为了数据完整性目的,表格永远不会看到UPDATES或DELETES。

这种表可以期待什么样的表现?使用大型表而不是将数据复制到需要的地方会有性能损失吗?

+1

它很容易测试。使用您最喜欢的脚本语言来生成200万套随机字符串,确保它们是唯一的(通过小心脚本或'sort -u')并将它们加载到数据库中。对于测试,地址是否看起来像地址并不重要。 –

回答

1

它取决于这个查询的数量,你的机器有多强,是否有一个好的索引,可以用于每个查询......一般来说2百万行PostgreSQL它不是一个大数字,当查询结果受到索引的限制,特别是通过主键搜索会很有效。

但是,通过LIKE进行搜索,并在开始时使用通配符,这将是一个性能问题。

+1

从9.1开始,PostgreSQL能够使用'LIKE'操作的索引,请参阅:http://www.depesz.com/index.php/2011/02/19/waiting-for-9-1-faster-likeilike/ –

+0

GIN指数听起来很有趣...我想我只是需要运行一些测试并亲眼看看。 – aneez