2014-12-12 6 views
-1

내가 PostgreSQL 8.4를 사용하고하고 위도 경도와 테이블을 가지고 PostgreSQL을에 위도 경도를 인덱싱합니다. 이 2 필드 (위도, 경도)는 문자가 다양하며 내부의 총 기록은 100K 이상입니다.어떻게 빨리

는 이미 다음과 같이 인덱스를 만들 : -

CREATE INDEX latlon 
    ON lyr_gtpencemaran 
    USING btree 
    (lon, lat); 

내가

Select * from mytable 

처럼 쿼리 할 때 그것에 대해 3085ms을합니다.

는 사람이 어떻게 더 빠른 쿼리를 만들 수있는 아이디어를 가질 수 있습니까? 어떤 제안이나 솔루션에 대한 사전에

감사를. 당신은 테이블에서 모든 행을 선택하면

+0

https://wiki.postgresql.org/wiki/Slow_Query_Questions –

+2

색인을 음소거하는 'SELECT'에 별표 와일드 카드를 사용하고 있습니다. 열 이름을 직접 사용하여 쿼리하십시오 :'SELECT lat, long FROM mytable'. 데이터를 쿼리하는 * 방법 *에 따라'인덱스 '를 만들어야한다는 것을 기억하십시오. 단순히 색인을 생성하는 것은 이야기의 절반에 불과하며 사용되는 것을 보장하지 않습니다. – Timusan

+0

답장을 보내 주셔서 감사합니다 mr.incohnito 및 Timusan. 나는 너의 제안에 의해 이것을 해결할 어떤 가능성을 시도 할 것이다. –

답변

0

PostgreSQL은 인덱스를 사용하지 않습니다. 테스트 해보 죠.

-- A primary key constraint creates an underlying index. 
create temp table test (
    n integer primary key 
); 

insert into test 
select generate_series(1, 100000); 

analyze test; 

단지 행을 선택하고, PostgreSQL은 인덱스를 사용합니다.

explain analyze 
select n 
from test 
where n between 500 and 530; 

"Index Only Scan using test_pkey on test (cost=0.29..8.95 rows=33 width=4) (actual time=0.014..0.023 rows=31 loops=1)" 
" Index Cond: ((n >= 500) AND (n <= 530))" 
" Heap Fetches: 31" 
"Total runtime: 0.045 ms" 

8.4에서 색인 전용 검사를받을 수 없습니다. 해당 기능은 나중에 소개 되었기 때문입니다. 하지만 여전히 색인 스캔을받을 것입니다.

모두 행을 선택하면 PostgreSQL은 순차적 검색을 사용합니다.

 
"Seq Scan on test (cost=0.00..1443.00 rows=100000 width=4) (actual time=0.025..16.794 rows=100000 loops=1)" 
"Total runtime: 23.835 ms" 

당신은 PostgreSQL을이 인덱스를 사용하는 적은 수의 행을 선택합니다

explain analyze 
select n 
from test; 
.