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

我应该拥有包含所有where子句字段的索引吗?

  •  1
  • Max  · 技术社区  · 8 年前

    我有一张桌子,像这样:

    CREATE TABLE films (
        title       varchar(40) NOT NULL,
        did         integer NOT NULL,
        date_prod   date,
        kind        varchar(10)
    );
    

    我有一个索引,如下所示:

    CREATE INDEX films_title_kind_idx ON films (title, kind);
    

    我有个问题,像这样:

    SELECT title, did, kind, date_prod 
    FROM films
    WHERE title = 'title1' AND
          kind = 'kind2' AND
          did = 4;
    

    我应该创建包含3列的索引吗?或当前索引 电影名称 够了吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Andrew Lazarus    8 年前

    视情况而定。

    一个合理的经验法则是,如果索引总是与少于百分之十的记录匹配,那么它是有用的。假设这真的是一个电影数据库, title, kind 甚至只是 title 将返回一个非常小的记录集以进行进一步筛选。我不确定,因为我不知道 did 是(可能不是一个好的字段名),但如果它有许多值,则将其添加到复合索引中是合理的。