Postgres中的INDEX?

时间:2009-07-30 22:24:56

标签: postgresql indexing

INDEX表达式有什么作用?最后的一个例子:

CREATE TABLE tags (
  tag_id                       varchar(255) NOT NULL, 
  "{Users}{userID}question_id" int4 NOT NULL, 
  tag                          varchar(20), 
  CONSTRAINT tag 
    PRIMARY KEY (tag_id));
CREATE INDEX tags_tag 
  ON tags (tag);

1 个答案:

答案 0 :(得分:10)

index是一种数据库结构,当根据索引中的字段进行搜索时,可以帮助加快对数据库各行的访问。

在您的示例中,CREATE INDEX语句使用列tags_tag在表tags上创建名为tag的索引。如果要根据tag字段从表中搜索行,数据库可能会使用索引更有效地查找行。如果没有索引,数据库可能不得不求助于对表的完全扫描,这可能需要更长的时间(取决于许多因素,如表的大小,值的分布,确切的查询条件)。不同的数据库还支持不同类型的索引,可用于以不同方式搜索数据。

索引也有一个缺点:对于每个索引,该表的写入速度都会下降。如果你插入一行,拥有索引意味着除了数据库写入行本身之外,它还必须更新索引。

确定将索引放在哪些列上可能会非常棘手,而且一如既往,针对实际数据的基准测试或实际查询是衡量性能的最准确方法。通常,您将需要要搜索的列的索引。因此,如果您可能想要按tag查找行,那么在那里放置索引肯定是有意义的。但是,如果你有一个地址簿,你(可能)不需要搜索街道,邮编/邮政编码或电话号码,因此它不值得写入性能。

您的主键列几乎总是会有一个由数据库自动生成的索引。如果您想保持特定列的值唯一,可以创建UNIQUE INDEX来强制执行此操作。

This所以问题是关于数据库索引的经验法则,这可能很有用。