나는 postgresql 배열 열과 함께 진 index:
CREATE TABLE things (
id integer NOT NULL,
tags character varying(255)[]
);
CREATE INDEX index_things_on_tags ON things USING gin (tags);
수있는 몇 가지 방법을 확인한 존재의 요소에 열을 사용하여 다양한 배열 연산자입니다. 여기에는 것've seen:
1.선택하시는'블루'=어떤(태그) 1.
select*from 것들을 어디로그<@'{"블루"}' 1.선택하시는'{"블루","황"}'&&태그
에 postgres9.3:
이 첫 번째 중 하나를 사용하여 진 index? I'm 확 두 번째 것을 사용하여 인덱스입니다. 그러나,그것은 다릅니다. 그't 용을 확인하는 경우 블루 태그 중 하나,그것을 필요로 지정한 정확한 배열입니다. 방법은 없을 만들의 스타일 구문에서 2 달성하기 위해 무엇 1 달성하는 것입? *에서,세 번째 내가 원하는 어느 행이 있는 어떤 하나의 파란색 또는 노란색이다. 이 쿼리를 사용하여 진 index? 하지 않을 경우,이렇게 하려면 어떻게 해야 합니까 쿼리 인덱스가?
왜 테스트 및십니까?
regress=> SET enable_seqscan = off;
SET
regress=> explain select * from things where 'blue' = ANY (tags);
QUERY PLAN
---------------------------------------------------------------------------
Seq Scan on things (cost=10000000000.00..10000000037.67 rows=6 width=36)
Filter: ('blue'::text = ANY ((tags)::text[]))
(2 rows)
regress=> explain select * from things where tags <@ '{"blue"}';
QUERY PLAN
------------------------------------------------------------------------------------
Bitmap Heap Scan on things (cost=12.05..21.52 rows=6 width=36)
Recheck Cond: (tags <@ '{blue}'::character varying[])
-> Bitmap Index Scan on index_things_on_tags (cost=0.00..12.05 rows=6 width=0)
Index Cond: (tags <@ '{blue}'::character varying[])
(4 rows)
regress=> explain select * from things where '{"blue","yellow"}' && tags;
QUERY PLAN
-------------------------------------------------------------------------------------
Bitmap Heap Scan on things (cost=12.10..22.78 rows=12 width=36)
Recheck Cond: ('{blue,yellow}'::character varying[] && tags)
-> Bitmap Index Scan on index_things_on_tags (cost=0.00..12.09 rows=12 width=0)
Index Cond: ('{blue,yellow}'::character varying[] && tags)
(4 rows)
그래서 Pg 사용한 공로를 인정받아&&
과<@
쿼리,하지만=어떤(...)
.
나는'm sure it'd 능을 가르치 Pg 변환x=어떤(y)
로ARRAY[x]@>y
,그't 니다.
What2 가 정확히 무슨 말을 당하고 싶습니다. 을 테스트하면"블루"하나의 태그가 있습니다. It's 지 않는 동등성 테스트,그's 멤버 테스트.