인덱스 열은 기본 테이블의 열일 필요는 없지만 테이블의 하나 이상의 열에서 계산 된 함수 또는 스칼라 표현 일 수 있습니다. 이 기능은 계산 결과에 따라 테이블에 빠르게 액세스하는 데 유용합니다.
예를 들어, 사례에 민감한 비교를하는 일반적인 방법은 사용하는 것입니다.Lower
기능 :
선택 *에서 test1에서 where (col1) = 'value';
이 쿼리는의 결과에 정의 된 경우 색인을 사용할 수 있습니다.Lower (col1)
기능 :
test1에서 index test1_lower_col1_idx 만들기 (lower (col1));
우리 가이 색인을 선언해야한다면고유 한
, 그것은 행의 생성을 막을 것입니다col1
값은 경우에만 다릅니다.col1
값은 실제로 동일합니다. 따라서 표현식에 대한 색인은 단순한 고유 한 제약으로 정의 할 수없는 제약 조건을 시행하는 데 사용될 수 있습니다.
다른 예로, 종종 다음과 같은 쿼리를하는 경우
선택 *에서 (First_name || ''|| last_name) = 'John Smith';
그러면 다음과 같은 색인을 만드는 것이 좋습니다 :
People에서 index people_names 만들기 ((first_name || ''|| last_name);
의 구문색인 생성
명령은 일반적으로 두 번째 예제와 같이 인덱스 표현식 주위에 괄호를 작성해야합니다. 첫 번째 예에서와 같이 표현식이 함수 호출 일 때 괄호는 생략 할 수 있습니다.
인덱스 표현식은 각 행 삽입에 대해 파생 된 표현식을 계산해야하기 때문에 유지하는 데 비교적 비싸다.젠 토토 PostgreSQL그러나 인덱스 표현식은입니다.not색인 검색 중에 이미 인덱스에 저장되어 있기 때문에 다시 계산했습니다. 위의 두 가지 예에서 시스템은 쿼리가 just로 본다여기서 indexedColumn = 'constant'
따라서 검색 속도는 다른 간단한 인덱스 쿼리와 동일합니다. 따라서 표현식의 인덱스는 검색 속도가 삽입 및 업데이트 속도보다 중요 할 때 유용합니다.
문서에 맞지 않는 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면