postgresql - Postgres 中的索引?

标签 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);

最佳答案

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

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

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

决定在哪些列上放置索引可能很棘手,而且一如既往,针对真实世界数据的基准测试或真实世界查询是衡量性能的最准确方法。通常,您需要在要搜索的列上建立索引。因此,如果您可能希望通过 tag 查找一行那么在此处放置索引绝对有意义。但是,如果您有地址簿,您(可能)不需要搜索街道、邮政编码或电话号码,因此写入性能受到影响是不值得的。

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

This SO 问题询问有关数据库索引的经验法则,这可能会有用。

关于postgresql - Postgres 中的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209745/

相关文章:

postgresql - 错误 : operator does not exist: timestamp without time zone > integer)

postgresql - 如何计算文本的真实SHA1?

sql - MariaDB是否支持重命名索引?

ruby-on-rails - 轮胎+ Elasticsearch -强制导入

postgresql - 从 SQlite 切换后,无法在 Flask Sqlalchemy 的 Postgresql 中插入 NULL 作为主键值

java - 具有数据加密功能的 PostgreSQL JDBC 驱动程序

postgresql - 如何在大事务下获得高性能(postgresql)

sql - 如何根据时间戳的年份和月份创建索引?

MySQL - 删除表时索引会被删除吗?

c++ - 与 Direct3D 中的顶点和索引缓冲区作斗争