【发布时间】:2011-05-18 14:49:55
【问题描述】:
我有一个 Postgres 数据库,它有 2 列不是主键(也不能是),但被大量搜索并与其他表中的 2 列进行比较。
我相信这是为我的表添加索引的完美案例。我以前从未在数据库上使用过索引,所以我正在尝试学习这样做的正确方法。
我了解到我可以选择多种类型的索引。如何确定哪种方法对我的数据库最有效?正确的方法是创建一个涵盖两列的索引吗?
【问题讨论】:
标签: postgresql indexing
我有一个 Postgres 数据库,它有 2 列不是主键(也不能是),但被大量搜索并与其他表中的 2 列进行比较。
我相信这是为我的表添加索引的完美案例。我以前从未在数据库上使用过索引,所以我正在尝试学习这样做的正确方法。
我了解到我可以选择多种类型的索引。如何确定哪种方法对我的数据库最有效?正确的方法是创建一个涵盖两列的索引吗?
【问题讨论】:
标签: postgresql indexing
也尝试理解queryplanner,因为PostgreSQL 的这一部分必须与您的索引一起使用。 EXPLAIN ANALYZE 对优化您的查询至关重要。
【讨论】:
Postgres 支持 B-tree、R-tree、Hash、GiST 和 GIN 索引类型。 B-tree 索引是最常见的并且适合最常见的场景。这是语法:
CREATE INDEX idex_name ON table_name USING btree(column1, column2);
这里是 createindex 文档,这里是关于 postgres 中不同 indextypes 的更多信息。
您应该使用哪种类型的索引取决于您要执行的操作类型。如果您只是想要相等性检查,那么哈希索引是最好的。对于最常见的操作(例如比较、模式匹配),应该使用 B-tree。我个人从未使用过 GiST 或 GIN 索引。有没有大师?
文档描述了所有这些类型。他们可以比我更好地帮助你:)
希望这会有所帮助。
【讨论】: