【问题标题】:How to determine what type of index to use in Postgres?如何确定在 Postgres 中使用什么类型的索引?
【发布时间】:2011-05-18 14:49:55
【问题描述】:

我有一个 Postgres 数据库,它有 2 列不是主键(也不能是),但被大量搜索并与其他表中的 2 列进行比较。

我相信这是为我的表添加索引的完美案例。我以前从未在数据库上使用过索引,所以我正在尝试学习这样做的正确方法。

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

【问题讨论】:

    标签: postgresql indexing


    【解决方案1】:

    也尝试理解queryplanner,因为PostgreSQL 的这一部分必须与您的索引一起使用。 EXPLAIN ANALYZE 对优化您的查询至关重要。

    【讨论】:

      【解决方案2】:

      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 索引。有没有大师?

      文档描述了所有这些类型。他们可以比我更好地帮助你:)

      希望这会有所帮助。

      【讨论】:

      • 谢谢,我稍微更新了我的问题。我实际上只是在寻找平等,所以我猜哈希索引是最好的。
      • 从头开始,散列不适用于多列。我想我将不得不做一些实验,看看 2 个单独的哈希是否会比 1 个单独的 b-tree 更快
      • 您通常不想使用哈希索引。来自 pg 9.1 文档:“哈希索引操作目前没有 WAL 记录,因此在数据库崩溃后可能需要使用 REINDEX 重建哈希索引。它们也不会通过流式或基于文件的复制进行复制。出于这些原因,哈希目前不鼓励使用索引。”
      • GiST(除其他外)用于索引 PostGIS 扩展附带的几何数据类型
      猜你喜欢
      • 2012-03-17
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多