2009-04-16 3 views

답변

6

중복되는 문자열이 많이 있습니까? 그렇지 않다면 정규화는 아무 것도 산출하지 않습니다. 그렇다면 색인 생성은 복제가 많을수록 효과가 떨어집니다. (동일한 인덱스를 가진 모든 항목을 검색해야하기 때문에)

데이터베이스 엔진에서 지원하는 경우 문자열을 클러스터 된 인덱스로 설정하면 유사한 문자열이 서로 옆에 저장됩니다.

두 열에 이미 색인이 있고 두 색인을 모두 비교하는 경우 색인을 최대한 활용하고 있습니다.

+0

정확하게 클러스터 된 인덱스로 설정하는 방법은 무엇입니까? – zsharp

+0

MSSQL : 클러스터 된 인덱스 생성 foo_string_cidx ON foo_table (foo_string); –

1

이것은 실제로 테스트하기가 쉽습니다.

테이블을 두 가지 방법으로 설정하고 무작위로 100,000 개의 행을 생성하고 두 가지 모두에 대해 몇 가지 쿼리를 실행하고 어느 것이 더 빠르는지 확인할 수 있습니다.

2

실제로 문자열 값이 필요한 경우 대답은 아니오입니다.

DB의 문자열 비교는 int를 비교하는 것보다 비용이 적게 들며 int에서 문자열을 찾는 것입니다.

문자열의 중복에 대해 더 많은 복제를 수행하면 비정규화된 경우 필요한 저장 공간이 줄어 듭니다. 그래도 여전히 느려질 것입니다.

저장 용량 이상의 성능을 찾고 있다면 int PK 형 문자열을 사용하십시오. Oracle을 사용하는 경우

0

, 당신은 Oracle docs에서 COMPRESS 1.

으로이 인덱스 구성 테이블을 탐험 할 수 있습니다

하는 반복 제거 키 압축을 가능하게 COMPRESS를 지정 색인 구성 표의 기본 키 열 값이 발생했습니다. 접두어 길이를 지정하려면 정수를 사용하고 접두사 열 의 수를 압축하려면 을 사용하십시오.

0

인덱스를 사용하면 빠르게 검색 할 수 있습니다. 그러나 데이터베이스가 모든 가장 중요한 필드를 알고있는 경우에만 인덱스를 사용할 수 있음을 기억하십시오. 당신에 대한 인덱스가있는 경우 예를 들어, :

int, string 

을 다음 데이터베이스는 인터넷 용, 또는 INT와 문자열의 조합을 검색 인덱스를 사용할 수 있습니다. 그러나 문자열을 검색하는 데 사용할 수는 없습니다. 두 개의 별도의 인덱스를 작성하는 경우

:

index 1: int 
index 2: string 

그런 다음 데이터베이스 INT 및/또는 문자열을 효율적으로 검색 할 수 있습니다.

테이블을 표준화할지 여부는 인덱스 선택의 절반만큼 중요하지 않습니다. 정규화는 일반적으로 다른 테이블을 검색하기 때문에 검색 속도를 늦 춥니 다.

1

테이블은 이미 정규화되어 있습니다.

문자열을 int로 변경하면 더 이상 정규화되지 않습니다.

이것은 까다롭게 보일지 모르지만 "정상화 된"이라는 단어는 지나치게 익숙하지 않은 부분까지 사용되고 있습니다.