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

MySQL中的索引是否互相干扰?

  •  0
  • Roman  · 技术社区  · 14 年前

    我有一张有三列的桌子。此表包含许多raws(百万)。当我从表中选择行时,我经常使用以下内容 where 条款:

    where column2=value1 and column3=value2
    where column1=value  
    

    加快 select 查询我要将第1列和第2列声明为索引。我的问题是 如果将第二列声明为索引,则不会降低将第一列声明为索引的积极效果。 .

    我还想问一下,将第二列声明为索引是否会加快这种类型的查询: where column2=value1 and column3=value2 .

    补充 这个 column1 , column2 column3 entity , attribute , value . 这很一般。作为实体,我使用人、电影、城市、国家等。属性包括:“位于”、“出生日期”、“生产者”。

    2 回复  |  直到 13 年前
        1
  •  4
  •   Theo    14 年前

    您应该创建支持查询的索引。在这种情况下,您希望在 column2,column3 一起(不是两个单独的索引,而是 列组合的索引)以支持第一个查询,另一个位于 column1 以支持第二个查询。更一般地说,如果查询使用一组列,那么为所有这些列添加索引将加快速度(当然,尽管有许多例外)。

    上的索引 column2 会加快查询速度 column2=value1 and column1=value2 以及 第2列,第3列 (重要的是 第2列 是索引中的第一列)。

    使用索引时, EXPLAIN 关键字非常有用。在查询前加前缀 解释 (例如) EXPLAIN SELECT * FROM table )获取数据库将如何执行查询的描述。它将告诉您是否要使用索引,在这种情况下,使用哪个索引。

        2
  •  0
  •   Tim Cooper    13 年前

    看来你的计划都不会奏效。基于这两个WHERE条款,我建议 主键 column1 第二个索引 column2,column3 . 这将加速您的两个查询。