postgres中的这个索引有意义吗?

时间:2016-07-04 10:47:22

标签: database postgresql indexing hash

我在Postgres中创建了一个包含这两个表的非常简单的数据库:

歌手( ID ,姓名,姓氏,生日)

歌曲( ID ,姓名,专辑,年份,歌手)

表中的

ID Singer是串行类型,它是主键。

表格中的

ID 歌曲是串行类型,它是主键。

专栏"歌手"在Song表中引用Singer表中的ID

我想检索 给定歌手的所有歌曲(让我们说歌手的id = 3)和歌手的姓名

因此我需要这样的查询:

SELECT song.name, song.album, song.year, singer.name, singer.surname
FROM song, singer
WHERE song.singer = singer.id AND singer.id = 3

我在"歌手"上创建了哈希索引。 Song表中用于优化连接操作的列:

CREATE INDEX ON song USING hash (singer);

但是,如果我执行查询并使用explain / analyze,我的索引似乎不会被使用。

所以我的问题是:这样的索引是否有意义?

如果没有,这是因为专栏&#34;歌手&#34;在歌曲表中是一个引用歌手表中的主键(id)的外键,Postgres会自动在主键上创建索引(因此我不需要自定义索引,因为基本上它是完全相同的事情)?< / p>

1 个答案:

答案 0 :(得分:0)

首先:永远不要使用hash索引,因为它们会在服务器崩溃时损坏,请参阅the documentation

是的,这个索引肯定会有所帮助,因为在这种情况下,优化器应选择嵌套循环连接并将song作为内部表

请注意,在您定义外键约束的列上创建索引几乎总是正确的,否则DELETE上的任何singer都将导致 song上的顺序扫描

相关问题