2014-02-17 3 views
1

알다시피, 인덱스 작성 중에 추가 할 수있는 접두어 길이 열이 있습니다. 나는 google.com 및 stackoverflow.com을 검색 한 후 MySQL의 예,postgresql에서 접두어 길이 색인을 추가하는 방법은 무엇입니까?

alter table j1 add index idx_j1_str1 (str1(5)); 

위해 나는 PostgreSQL을에 동등한 해결책을 찾지 못했습니다.

그럼 누구든지 postgresql의 함수 색인을 제외한 답을 말할 수 있습니까?

모든 답변을 주시면 감사하겠습니다.

+0

"str1 텍스트, 키 idx_str1_prefix5 (str1 (5)) ..."와 같이 mysql에 열이있는 테이블을 가지고 있기 때문에. 아무 것도 변경하지 않고 postgresql로 마이그레이션하려고합니다. –

답변

3
create index idx_j1_str on j1 (left(str1,5)); 

하지만 저는 Postgres에서 이와 같은 것이 필요하다고 생각하지 않습니다. 단지 str1에 색인은 아마 다재다능하다. 물론 이것은 당신이 실행 한 쿼리에 크게 의존합니다. 우리에게 보여주지 않았기 때문에 실제로 필요한 인덱스의 종류는 말할 수 없습니다.

는 포스트 그레스에서 함수 기반 인덱스를 사용하려면 쿼리가 인덱스에 사용 된 것과 동일한 표현을 포함해야합니다 (및 지원 기본적으로 다른 DBMS) :

select * 
from j1 
where left(str1,5) = '1234' 

위를 사용합니다 인덱스 (테이블이 충분히 크고 조건이 전체 결과를 실질적으로 감소시키는 경우). 또한 수 (left(str1,5) = '1234'에 해당)

select * 
from j1 
where str1 like '1234%' 

만 : 해당 컬럼에 일반 인덱스를 작성하는 경우

: 다음

create index idx_j1_str on j1 (str1 varchar_pattern_ops); 

을 그것은 같은 것을 사용할 수 있습니다 사용 대상 :

select * 
from j1 
where str1 like '1234678%' 

와일드 카드를 사용하는 다른 접두어 검색이 있습니다.

+1

감사합니다. 그러나 나는 "left (str1,5) = '...'"와 같은 쿼리를 작성해야합니다. 그렇지 않으면 인덱스를 사용할 수 없습니다. –

+0

@Moon_of_father :'left (str1,5)'**를 사용하는 쿼리는 Postgres에서 위의 인덱스를 사용합니다 ** 내 편집 참조. –

관련 문제