我在Postgres的做了一個非常簡單的數據庫包含這兩個表:postgres中的這個索引是否有意義?
歌手(ID,姓名,生日)
歌(ID,名稱,專輯,年份,歌手)
ID表中歌手屬於serial類型,它是它的主鍵。
ID表中宋是串行類型,它是它的主鍵。
宋表引用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
我在宋表中創建的「歌手」一欄,然後一個散列索引優化連接操作:
CREATE INDEX ON song USING hash (singer);
然而,如果我執行查詢並使用解釋/分析,我的索引似乎不被使用。
所以我的問題是:像這樣的索引是否有意義?
如果不是,這是因爲歌曲表中的「歌手」列是引用歌手錶中的主鍵(id)的外鍵,並且Postgres自動在主鍵上創建索引(所以我的自定義索引不是因爲基本上它是完全相同的東西)?
對不起讓我們說我想要一個給定的歌手(只有一個)的所有歌曲 我原來的帖子寫的散列索引是否有意義呢? 我已經編輯了正確的查詢 – NoobNe0
原來的帖子另外,我必須選擇哈希或btree索引。散列值對於訪問單個值非常有用,而btree適合訪問值的區間。 在這種情況下,需要特定的歌手,因此我選擇了散列索引。 – NoobNe0
好的,我已經更新了答案。你應該永遠不要使用散列索引,因爲任何崩潰都會破壞你的數據庫。你對B-tree索引的理解不正確,在你的情況下它們工作得很好。 –