在 Postgres 9.4.11 数据库中,我有一个很大的图书表,它与作者是一对多的关系。从理论上讲,为了提高性能,我在电子书记录中缓存了作者姓名以便快速搜索。列的属性authors_cache:
示例行:
我在此列上创建了 GIN 索引:
CREATE INDEX "index_ebooks_on_authors_cache" ON "ebooks" USING gin ("authors_cache")
Run Code Online (Sandbox Code Playgroud)
它在搜索时不使用索引authors_cache并且花费了不可接受的时间:
EXPLAIN ANALYZE
SELECT * FROM "ebooks"
WHERE ('Charles Bukowski' = ANY (authors_cache))
LIMIT 60 OFFSET 0;
Run Code Online (Sandbox Code Playgroud)
结果:
CREATE INDEX "index_ebooks_on_authors_cache" ON "ebooks" USING gin ("authors_cache")
Run Code Online (Sandbox Code Playgroud)
10 秒不是可接受的时间。我对设计更改持开放态度,因为我还没有与本专栏“结婚”。