Postgres (すべて localhost) で GIN インデックスを使用して全文検索を行っています。独自のクエリを作成して psql で実行すると、応答時間がEXPLAIN ANALYZE
長くなり、インデックス ヒット (woohoo) が報告されます。同じ検索用語を使用して Django 管理者の検索ボックスを介してクエリを実行すると、インデックスがスキャンされず、クエリが完了するまでに永遠に時間がかかります。
私のインデックスは、完全に素晴らしい pg_trgm Postgres 拡張機能を介して作成されます。
CREATE INDEX name_gin ON entity USING gin (name gin_trgm_ops);
このクエリはインデックスにヒットし、90 万件のフルテキスト レコードを検索するのに 84ミリ秒という驚異的な時間を要します。
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管理QuerySet-something、またはこれを高速化するためにオーバーライドまたは変更できるRawQueryがあります上?管理ページがせいぜい遅くなりたくないし、最悪の場合、サイトの残りの部分を引きずり下ろしたくありません。
前もって感謝します。