代码之家  ›  专栏  ›  技术社区  ›  DisgruntledGoat

我应该索引已经是多字段索引的一部分的字段吗?

  •  2
  • DisgruntledGoat  · 技术社区  · 16 年前

    例如,我有一个这样的表,在前3个字段上有一个主键:

    itemid | type | value | other_field [etc]
    

    如果在我的网页上,我几乎总是选择 type 只有场,值得拥有 分离 指数 类型 (即性能是否会提高),或者主键索引是否覆盖字段?

    2 回复  |  直到 16 年前
        1
  •  4
  •   Mark Byers    16 年前

    索引/关键事项中字段的顺序。

    如果您的主键为on(type、itemid、value)或(type、value、itemid),那么额外的索引可能不会有什么不同。多个列上的索引也可以用于该索引的任何完整前缀。在这种情况下创建一个新索引的一个好处是,它稍微窄一些,这样每个页面上都会有更多的行,但这种差别可能很小。此外,您还应该考虑针对修改数据的额外成本进行查询的好处。

    如果您的主键是任何其他项,例如(itemid、type、value),则(type)上的额外索引可能会有所帮助,因为当类型不是列表中的第一个类型时,主键不能用作类型上的索引。

    关于过早优化的常见评论也在这里。确定最快速度的最好方法是在实际数据上对其进行测试。在某些情况下,即使您认为应该使用索引,也不会使用索引,或者在其他情况下,使用的索引不是您认为应该使用的索引。如果您想提高应用程序的性能,您应该收集(如果这不是一个选项,则随机生成)一些实际数量的数据,并使用不同的索引策略测量您对该数据的查询的实际性能。

        2
  •  1
  •   Jonathan Leffler    16 年前

    它取决于主键中列出的字段的顺序。

    它还取决于您将对表进行的查询。

    如果主键按该顺序打开“(item,type,value)”,那么仅在“type”上表示条件的查询就不能很好地使用主键索引。在这种情况下,“type”或“(type,…”)上的单独索引可能有些意义;它可能被查询使用。但是,如果您从不进行任何只列出类型的查询(它们总是列出项和类型),那么额外的索引就不太可能有任何用处。

    在不知道(a)表中已有的索引和(b)对表运行太慢的查询类型的情况下,决定是否向表中添加索引是愚蠢的。如果没有一个查询太慢,那么您可能不需要索引。