2011-08-25 2 views
5

내 sqlite 데이터베이스의 기본 키로 텍스트 열을 사용해야합니다. 또한 해시 함수를 사용하여 내 텍스트 값에서 32 비트/64 비트 int를 얻을 수 있습니다 (기본 키로 사용하려는 경우). 그래서 나는 내 텍스트 값 대신에이 int 해시 값을 기본 키로 사용할 수 있습니다. 하지만 테이블에 원시 텍스트 값을 추가로 저장해야합니다.sqlite : 텍스트 열을 기본 키로 사용하거나 해시 함수로 변환해야합니까?

하지만 sqlite는 내부적으로 ROWID를 사용하고 있으므로 해시 함수를 사용하면 어쨌든 도움이되는지 알 수 없습니다.

sqlite는 해시 값 대신 해시 값이나 텍스트 값을 페이지에 저장합니까? 텍스트 값을 저장하면 페이지가 날아갈 수 있고 해시 값을 사용하면 더 좋을 것이라고 생각합니다.

하지만 여기에는 지식이 부족합니다. 도와 주시면 감사하겠습니다.

+0

텍스트 열을 * 기본 키로 사용해야하는 이유는 무엇입니까? – Tim

+0

@Tim, 이것이 데이터를 가져 오는 키이기 때문에. 약 30 자 길이의 문자열입니다. – Chris

+0

다른 테이블이나 다른 테이블에서이 테이블을 참조하려고한다면 PK로 정수를 자동 증가시키고 longtextfield에 인덱스를 넣을 것입니다 :'select id, longtextvalue from T where longtextvalue =? '. – Tim

답변

1

예, 문자열의 모든 색인 (기본 키 용도 포함)은 두 배의 공백을 사용합니다. 행의 값에 대해 한 번, 색인의 값에 대해 두 x 째.

따라서 해싱이 필요 (범위별로 정렬, 조회가 필요하지 않음)하면이를 사용하는 것이 좋습니다.

1

텍스트 열의 값이 고유해야하는 경우 해당 열에 고유 색인을 넣어야합니다.

실제 질문은 기본 키와 관련이 없으며 외래 키 참조와 관련이 있습니다. 테이블에 고유 한 정수 열과 고유 텍스트 열이있는 경우이 중 하나를 외래 키 참조의 대상으로 사용할 수 있습니다. 정수에 대한 모든 외래 키 참조에는 조인이 필요합니다. 텍스트에 대한 일부 외래 키 참조는 조인을 필요로하지 않습니다. 중요한 정보는 키 자체에서 전달되기 때문에 텍스트 키 외에 다른 열이 필요한 쿼리 만 조인해야합니다.

관련 문제