小编And*_*Wei的帖子

查询 ANY(column) 时不搜索 GIN 索引

在 Postgres 9.4.11 数据库中,我有一个很大的图书表,它与作者是一对多的关系。从理论上讲,为了提高性能,我在电子书记录中缓存了作者姓名以便快速搜索。列的属性authors_cache

author_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 秒不是可接受的时间。我对设计更改持开放态度,因为我还没有与本专栏“结婚”。

postgresql index index-tuning postgresql-9.4

2
推荐指数
1
解决办法
739
查看次数

标签 统计

index ×1

index-tuning ×1

postgresql ×1

postgresql-9.4 ×1