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

MySQL:做3个字段的复合索引,还是做3个单独的索引?

  •  14
  • Petruza  · 技术社区  · 14 年前

    我有一个mysql表,除其他属性外,还有时间戳、类型和用户ID。
    它们都是可搜索和/或可排序的。
    是为每个索引创建一个索引,还是用所有三个索引创建一个单一的复合索引,还是两者都创建?

    2 回复  |  直到 14 年前
        1
  •  10
  •   Unreason    14 年前

    巴勃罗的回答是正确的,但也许你不会意识到复合指数可能是合理的。

    您可以有多个索引, idx1(tstamp, user_id) 不排除你有 indx2(tstamp, type) idx1reverse(user_id, tstamp) 等等…

    当复合索引覆盖查询中的所有条件时,它们最有用,因此您建议的索引对于

    SELECT * FROM my_table WHERE tstamp = @ts1 AND user_id = @uid AND type = @type
    

    如果要提高此类查询的性能,可以考虑添加复合索引。

        2
  •  9
  •   Pablo Santa Cruz    14 年前

    mysql> create index my_idx on my_table(tstamp, user_id, type);
    

    mysql> select * from my_table where type = 'A';
    

    my_idx