前几天我开始使用分区来处理大量数据。
我创建了主表作为文档建议,创建了一些继承自主表的子表,然后为每个子表添加了一个约束来定义允许的键值。约束就像:
检查(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());
答案 0 :(得分:0)
是的,如果表中的所有数据具有相同的列值,则不需要索引。事实上,你根本不需要这个专栏。
如果你有一个索引,并且它确实被使用(例如作为WHERE子句的结果), 这实际上可能会减慢速度。当你最终选择整个表的一小部分时(有些人说最多百分之十),通过索引来过滤行只是有益的。访问索引然后以每一行结束都是浪费精力。
在阅读我来的文档时 通过以下建议:“为 每个分区,创建一个索引 关键栏“
您确定文档是在讨论分区键吗?不是全球主键?