안녕하세요.
김상기님의 풀텍스트 인덱스에 관한걸 예전에 보았는데
써먹지 못하다가 최근 쓸데가 생겨서 무단전제를 할까 하여 테스트 하던중 =_=;
text 타입에 대한 like 검색에서 인덱스를 사용할까? 라는 의문이 들어서 질문 드립니다.
김상기님의 글중에
ioseph=# EXPLAIN ANALYZE SELECT a.* FROM board a, board_fti_title b WHERE b.ftikey LIKE '안녕%' AND a.num = b.num;
NOTICE: QUERY PLAN:
Nested Loop (cost=0.00..41.25 rows=5 width=40) (actual time=0.16..0.18 rows=1 loops=1)
-> Index Scan using board_fti_keyi on board_fti_title b (cost=0.00..17.07 rows=5 width=4) (actual time=0.09..0.10 rows=1 loops=1)
-> Index Scan using board_num_key on board a (cost=0.00..4.82 rows=1 width=36) (actual time=0.05..0.06 rows=1 loops=1)
Total runtime: 0.48 msec
라는 부분이 있습니다. 근데 분명히 board_fti_keyi는 text 자료형이고 like 로 검색하는데도 인덱스를 사용한다고 나오는데요..
제가 테스트 하니까 역시나 인덱스를 사용하지 않습니다 ㅠ_ㅠ
제가 잘못된건지 궁금합니다. 7.2.1 컴파일한것과 RPM두가지를 두대의 리눅스에서 사용하고 있습니다.
CREATE TABLE test (a text);
CREATE INDEX test_a ON test(a); <- 이렇게도
CREATE TABLE test (a text);
CREATE INDEX test_a ON test using hash (a); <- 이렇게도
데이터를 몇개 대충 때려 넣구요
이런식으로 BTREE, HASH 두가지의 인덱스를 만들어서 따로 테스트 해보았는데도
netitup=# EXPLAIN SELECT a from test where a like 'a%';
NOTICE: QUERY PLAN:
Seq Scan on test (cost=0.00..1.05 rows=1 width=32)
이렇게만 나옵니다 =_=;
어째서 일까요 -_-;
참고로 제가 지금 쓰는 pgsql 서버 두개는 같은 내용을 담고 있고요.
20개의 테이블, 13개의 시퀀스, 45개의 인덱스가 있습니다
그리고 vacuum 이나 analyze를 하게 되면 인덱스가 다 깨져버립니다 -_-;
reindex db, reindex table, reindex index 를 해도 절대 복구되지 않고 테이블을 다시 생성해서 데이터를 집어넣기 전에는 절대 다시 인덱스가 되지 않는 희한한 상황입니다 -_-;
혹시 이것과 관련이..?
저한테 뭔가 문제가 있는걸까요? =_=;
제 상황이라면 모든 테이블이 한개에서 2~3개의 컬럼들이 연계되어 있고 배열 컬럼을 꽤 많이 사용하고 있습니다.
인제 pgsql이라면 사용자 정도의 수준에 이르렀다고 생각했는데 막 막 합니다 ㅠ_ㅠ;
풀텍스트 인덱스에서 인덱스가 깨지는 걸로 흘러와 버렸네요 =_=
어흑~ 답변을 ( -_);
그럼~ 좋은 주말되십쇼~
|