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

标签 database postgresql indexing b-tree-index

我有一张 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 的索引将返回一个非常小的记录集以供进一步过滤。我不能确定,因为我不知道 did 是什么(可能不是一个好的字段名),但如果它有很多值,将它添加到复合索引中是合理的。

关于database - 我应该为所有 Where-clause 字段创建索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51388419/

相关文章:

postgresql - 如何撤销对用户 postgres 的复制访问权限?

R:删除重复值并将第一个值保留在二进制向量中

mysql - 查询使用临时表,没有强制索引

mysql - MySQL什么时候更新索引

java - 如何在 pgadmin 中删除数据库

javascript - GraphQL/graphcool - 关系的变异

mysql - 在 MySQL 数据库中存储性别的最佳技术

sql - Postgres 中的慢速查询优化

database - 在哪里定义安全角色?

javascript - 我只想创建一个新的关联,使用 Sequelize(非常简单的问题)