我有一个Postgres数据库,其中有两列不是主键(也不能是主键),但会被大量搜索,并与其他表中的两列进行相等性比较.

我相信这是向我的表中添加索引的完美 case .我以前从未在数据库上使用过索引,所以我正在try 学习正确的方法.

我了解到有多种类型的索引我可以 Select .如何确定哪种方法对我的数据库最有效?正确的方法是创建一个覆盖两列的索引吗?

推荐答案

Postgres支持B树、R树、哈希、GiST和GIN索引类型.B树索引是最常见的,并且适合最常见的场景.以下是语法:

CREATE INDEX idex_name ON table_name USING btree(column1, column2);

这是createindex个文档,这是关于postgres中不同indextypes的更多信息.

应该使用什么类型的索引取决于要执行的操作类型.如果你只是想判断等式,那么哈希索引是最好的.对于最常见的操作(例如比较、模式匹配),应使用B-树.我个人从未使用GiST或GIN索引.有大师吗?

文档描述了所有这些类型.他们比我更能帮助你:)

希望这有帮助.

Postgresql相关问答推荐

优化PostgreSQL查询以将用户插入数据库

Postgres将唯一索引添加到已在分区上具有PK的分区表中,然后添加PK

如何将 jackc/pgx 与连接池、上下文、准备好的语句等一起使用

数据库所有者无法授予 Select 权限

从单选插入到多个表

gorm 不生成字符串列

PostgreSQL - 列出模式中的所有唯一约束

如何使用有限的varchar在postgres中存储单词é

PostgreSQL TIMESTAMPTZ 不适用于 SpringBoot Java Query

如何使用 SQLAlchemy 将列默认设置为 PostgreSQL 函数?

Heroku Rails 4 无法连接到服务器:connection refused

Django 1.8 数组字段追加和扩展

PostgreSQL:根据排序顺序仅 Select 每个 id 的第一条记录

是否有为 SQL Server 生成完整数据库 DDL 的工具? Postgres 和 MySQL 呢?

当记录包含 json 或字符串的混合时,如何防止 Postgres 中的invalid input syntax for type json

plpgsql:使用 2 个 OUT 参数调用函数

如何判断每个组中是否存在值

PostgreSQL:将时间戳转换为时间 - 或仅从时间戳列中检索时间

子查询的自连接

如何从 CSV 为 PostgreSQL 副本生成模式