我在 Postgres(所有本地主机)中使用 GIN 索引进行全文搜索,当我编写自己的查询并在 psql 中运行它时,我得到了很好的响应时间并EXPLAIN ANALYZE
报告了索引命中(woohoo),但是当通过 Django Admin 搜索框使用相同的搜索词进行查询,不会扫描索引,并且查询需要永远完成。
因此,我的索引是通过非常棒的 pg_trgm Postgres 扩展创建的:
CREATE INDEX name_gin ON entity USING gin (name gin_trgm_ops);
此查询命中索引并花费了惊人的84 毫秒来搜索 90 万条全文记录:
SELECT COUNT(*)
FROM entity
WHERE name LIKE UPPER('%dubteeeff%')
AND name LIKE UPPER('%django%');
由 Django Admin 界面创建的完全相同的查询需要938ms:
SELECT COUNT(*)
FROM entity
WHERE UPPER("entity"."name"::text) LIKE UPPER('%dubteeeff%')
and UPPER("entity"."name"::text) LIKE UPPER('%django%');`
唯一的区别似乎是引用列的方式——我对 Django 和 Postgres 还很陌生——是否有一些 Postgres 配置设置或 Django admin QuerySet-something,或者我可以覆盖或修改以加快速度的 RawQuery向上?我不希望我的管理页面充其量是缓慢的,最坏的情况是,将站点的其余部分拖下来。
提前致谢。