我应该用固定密钥创建分区索引吗?

时间:2009-09-04 00:13:23

标签: sql optimization postgresql

前几天我开始使用分区来处理大量数据。

我创建了主表作为文档建议,创建了一些继承自主表的子表,然后为每个子表添加了一个约束来定义允许的键值。约束就像:

检查(site_id ='google.com')

现在我的问题是:

在阅读文档时,我遇到了以下建议:“对于每个分区,在键列上创建一个索引”

如果整个分区的密钥相同,我应该这样做吗?在site_id列上有索引会有什么好处吗?

当我第一次阅读它时,我决定如果所有行都有相同的密钥(例如site_id ='google_com'),那么索引就没有必要了。


这是SQL illustraing DB结构和典型用法:

CREATE TABLE网站(         site_id varchar(50)PRIMARY KEY,         descr文本 );

- req是主表
CREATE TABLE req(         site_id varchar(50),         时间戳时间戳 );

- 现在让我们创建几个子表

INSERT INTO site(site_id)VALUES('google_com'); CREATE TABLE req_google_com(     检查(site_id ='google_com') )INHERITS(req);

INSERT INTO site(site_id)VALUES('twitter_com'); CREATE TABLE req_twitter_com(     检查(site_id ='twitter_com') )INHERITS(req);

- 现在写一些请求:
INSERT INTO req_google_com VALUES('google_com',now()),('google_com',now());

1 个答案:

答案 0 :(得分:0)

是的,如果表中的所有数据具有相同的列值,则不需要索引。事实上,你根本不需要这个专栏。

如果你有一个索引,并且它确实被使用(例如作为WHERE子句的结果), 这实际上可能会减慢速度。当你最终选择整个表的一小部分时(有些人说最多百分之十),通过索引来过滤行只是有益的。访问索引然后以每一行结束都是浪费精力。

  

在阅读我来的文档时   通过以下建议:“为   每个分区,创建一个索引   关键栏“

您确定文档是在讨论分区键吗?不是全球主键?