나는 postgres 9.6을 사용 중이다. JSONB 데이터를 한 열에 저장하면 하나의 쿼리 성능이 향상됩니다. 내 json 데이터에서 나는 텍스트가 name
열 있습니다. 다음 쿼리를 사용하여이 데이터를 쿼리하고 있습니다.ILIKE 포스트그레스 쿼리에서 GIN 인덱스 생성
Limit (cost=0.00..33.58 rows=40 width=72) (actual
time=112.428..4071.757 rows=11 loops=1)
|
| -> Seq Scan on read_models
(cost=0.00..2636.90 rows=3141 width=72) (actual time=112.416..4071.646
rows=11 loops=1) |
| Filter: ((body ->> 'name'::text) ~~* '%asd%'::text)
|
| Rows Removed by Filter: 78516
|
| Planning time: 1.658 ms
|
| Execution time: 4071.847 ms
나는이 부동산에 대한 인덱스를 다음 생성 : 여기
SELECT "id", "body", "created_at", "updated_at"
FROM "read_models"
WHERE ((body ->> 'name') ILIKE '%asd%')
LIMIT 40 OFFSET 0;
이 쿼리의 분석 결과 내가 다른 인덱스 유형을 생성
CREATE EXTENSION pg_trgm;
CREATE INDEX idx_name ON read_models USING gin ((body ->> 'name') gin_trgm_ops);
하지만 항상 같은 결과입니다 . 쿼리 시간은 인덱스없이처럼 동일합니다. 그 데이터를 쿼리 할 때 PG가이 인덱스를 사용하지 않는 것을 볼 수 있습니다. 포스트그레스에서 텍스트 데이터의 색인을 생성하는 방법에 대한 많은 정보를 보았고, 필자의 경우에는 왜 작동하지 않는지 이해할 수 없습니다. 어떤 도움을 주셔서 감사합니다.
'ILIKE % asd %'를 (를) 대체하는 요령이 있습니까? 해결 방안은 무엇인가? – dewastator
[** 텍스트 검색 **] (https://www.postgresql.org/docs/current/static/textsearch.html)를 사용할 수 있습니다. 그러나 아직 JSON 필드와 함께 사용하지 않았습니다. –
알겠습니다. 이제 'LIKE' 쿼리를 텍스트 검색 연산자로 대체하는 방법을 알아야합니다. 만약 당신이 튜토리얼을 가지고 있다면 (오히려 오히려 오히려 오피스가되기 쉽습니다) 여기에 게시하십시오. 고마워 – dewastator