【问题标题】:Does normal indexing also work by creating unique index?正常索引是否也可以通过创建唯一索引来工作?
【发布时间】:2017-05-18 09:14:51
【问题描述】:

大家好,我想知道,如果我在 postgreSQL 上创建两列的唯一索引,这两列的正常索引是否也可以通过相同的唯一索引工作,或者我必须为两者创建一个唯一索引和另外两个索引列如代码所示?我想创建 Talent_id、job_id 的唯一索引,两个列也应该单独索引。我阅读了很多资源,但没有得到适当的答案。

add_index :talent_actions, [:talent_id, :job_id], unique: true

上面的代码是否也处理下面的索引或者我必须单独添加下面的索引?

add_index :talent_actions, :talent_id
add_index :talent_actions, :job_id

谢谢。

【问题讨论】:

    标签: ruby-on-rails postgresql ruby-on-rails-4


    【解决方案1】:

    索引是数据库中的一个对象,如果查询计划者认为它是合适的,它可以用来更快地查找数据。因此,对您的问题的简单回答是“否”,创建一个索引不会在数据库中产生与创建三个不同索引相同的结构。

    我想你真正想知道的是:

    我需要所有三个索引,还是唯一索引已经优化了所有查询?

    与任何数据库优化一样,这取决于您运行的查询以及您拥有的数据。

    以下是一些注意事项:

    • 多列索引中的列顺序很重要。如果您有一个按姓氏然后名字排序的人的索引,那么您可以使用它来搜索具有相同姓氏的每个人;但是当您只知道他们的名字时,您可能无法使用它来搜索某人。
    • 数据分发很重要。如果您列表中的每个人都有姓“Smith”和“Jones”,那么您可以使用姓氏优先索引来相当轻松地搜索名字(只需在 Jones 下查找,然后在 Smith 下查找)。
    • 索引大小很重要。索引的列数越少,它就可以一次放入内存中,因此它的使用速度就越快。

    通常,查询计划器可以使用多个索引,它的工作是为您编写的查询估算上述因素的成本。

    通常,创建多个您认为可能会有所帮助的索引并没有什么坏处,但它确实会占用磁盘空间,并且有时会导致查询规划器选择更糟糕的计划。因此,最好的方法始终是使用一些真实数据填充数据库,并查看一些真实查询的查询计划。

    【讨论】:

    • 我需要所有三个索引,还是唯一索引已经优化了所有查询? >> 是的,这正是我要问的,感谢您的快速回复
    • 我打算为所有外键使用索引,因为它们直接或间接用于查询和搜索或排序,所以我会这样做:1)为所有外键创建索引2)如果需要唯一索引,我也会另外创建。如果我错了,请纠正我。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多