我应该为所有 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
是什么(可能不是一个好的字段名),但是如果它有很多值,将它添加到复合索引中是合理的。
我有一个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
是什么(可能不是一个好的字段名),但是如果它有很多值,将它添加到复合索引中是合理的。