我应该为所有 Where-clause 字段创建索引吗?

Should I have index with all Where-clause fields?

我有一个table,像这样:

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 列的索引吗?或者当前索引 films_title_kind_idx 是否足够?

视情况而定。

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