Postgresql 文本列上的唯一索引-索引类型是什么?

Postgresql 文本列上的唯一索引-索引类型是什么?,postgresql,indexing,Postgresql,Indexing,在我的表中,有一列slug,类型为TEXT。它将存储用于以下查询的slug: SELECT * FROM posts WHERE slug = 'my-post-slug' 现在我在slug上设置了unique索引 唯一索引(btree、hash等)的类型是什么 这足够了吗?还是我应该在类型为hash的slug列上添加第二个索引 回复1) 如果不指定索引类型,则默认为btree re 2) 是的,一个btree索引就足够了。散列索引在Postgres中通常被认为不是很有效。此外,它们还有一些缺

在我的表中,有一列
slug
,类型为
TEXT
。它将存储用于以下查询的slug:

SELECT * FROM posts WHERE slug = 'my-post-slug'
现在我在slug上设置了
unique
索引

  • 唯一索引(btree、hash等)的类型是什么
  • 这足够了吗?还是我应该在类型为
    hash
    slug
    列上添加第二个索引
  • 回复1)

    如果不指定索引类型,则默认为btree

    re 2)

    是的,一个btree索引就足够了。散列索引在Postgres中通常被认为不是很有效。此外,它们还有一些缺点

    哈希索引操作目前没有日志记录,因此,如果存在未写入的更改,则在数据库崩溃后可能需要使用REINDEX重新生成哈希索引。此外,在初始基本备份之后,对哈希索引的更改不会通过流式复制或基于文件的复制进行复制,因此它们会对随后使用它们的查询给出错误的答案。由于这些原因,目前不鼓励使用散列索引

    (重点矿山)

    re 1)

    如果不指定索引类型,则默认为btree

    re 2)

    是的,一个btree索引就足够了。散列索引在Postgres中通常被认为不是很有效。此外,它们还有一些缺点

    哈希索引操作目前没有日志记录,因此,如果存在未写入的更改,则在数据库崩溃后可能需要使用REINDEX重新生成哈希索引。此外,在初始基本备份之后,对哈希索引的更改不会通过流式复制或基于文件的复制进行复制,因此它们会对随后使用它们的查询给出错误的答案。由于这些原因,目前不鼓励使用散列索引


    (我的重点)

    那么您所做的就是测试与
    =
    的相等性?没有模式匹配?另外:始终提供你的Postgres版本。是的,只有相等,Postgres v=9.3当你被马的答案覆盖时。所以你所做的就是用
    =
    测试相等性?没有模式匹配?另外:始终提供您的Postgres版本。是的,只有相等,Postgres v=9.3当您被一匹马的答案覆盖时。B-tree不仅仅是默认值。目前,只有B树索引可以声明为唯一的。B-树不仅仅是默认值。目前,只有B树索引可以声明为唯一的。