如何确定Postgres中使用的索引类型?

Kel*_*njb 26 postgresql indexing

我有一个Postgres数据库,它有2列不是主键(也不是),但是经过大量搜索并在其他表中进行相等性比较.

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

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

Max*_*Max 23

Postgres支持B树,R树,Hash,GiST和GIN索引类型.B树索引是最常见的,也是最常见的场景.这是语法:

CREATE INDEX idex_name ON table_name USING btree(column1, column2);
Run Code Online (Sandbox Code Playgroud)

这是createindex文档,这里有关于postgres中不同索引类型的更多信息.

您应该使用哪种类型的索引取决于您要执行的操作类型.如果您只是想要进行等式检查,那么哈希索引是最好的.对于大多数常见操作(例如比较,模式匹配),应使用B树.我个人从未使用过GiST或GIN索引.那里有什么古鲁?

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

希望这可以帮助.

  • 您通常不希望使用哈希索引.从第9.1页文档开始:"哈希索引操作目前不是WAL记录的,因此在数据库崩溃后可能需要使用REINDEX重建哈希索引.它们也不会通过流式传输或基于文件的复制进行复制.出于这些原因,哈希目前不鼓励使用索引." (13认同)
  • 从头开始,哈希不能跨多个列工作.猜猜我将不得不做一些实验,看看2个单独的哈希值是否会比单个b树更快 (2认同)