MySQL - 문자열을 기본 키로 사용
Stack Overflow에 대한 비슷한 게시물을 이미 보았지만, 만족스럽지 못했습니다.
제가 웹 서비스를 제공한다고 가정해 보겠습니다.http://foo.com/SERVICEID
SERVICEID는 URL 단축기 서비스가 URL에 대한 ID를 생성하는 방법과 유사하게 서비스(기본 64, 소문자+숫자)를 참조하는 데 사용되는 고유한 String ID입니다.
문자열과 정수를 비교하는 데 고유한 성능 문제가 있다는 것을 알고 있습니다.
그런데 String 타입의 기본 키를 최대한 최적화하는 방법이 궁금합니다.
저는 MySQL을 사용하고 있습니다. (현재 MyISAM 엔진을 사용하고 있지만, 모든 엔진 차이를 이해하지는 못합니다.)
감사해요.
업데이트를 위해 문자열은 실제로 기본 62 인코딩 정수였기 때문에 기본 키는 정수였고, 비긴트의 크기를 초과할 가능성이 없기 때문에 다른 것을 사용하는 것은 너무 말이 되지 않습니다(특정 용도의 경우).
CHAR나 VARCHAR를 기본 키로 사용해도 문제가 없습니다.
물론 INT보다 조금 더 많은 공간을 차지하는 경우가 많지만, 가장 논리적인 선택이고 필요한 열의 수를 줄여 별도의 ID 필드를 가질 필요가 없어 효율성을 높일 수 있는 경우도 많습니다.
예를 들어, 국가 코드나 상태 축약어에는 이미 표준화된 문자 코드가 있으며, 이는 각 문자에 대한 임의의 정수 ID를 추가로 구성하는 것이 아니라 문자 기반 기본 키를 사용하는 좋은 이유가 될 것입니다.
외부 ID가 base64이면 내부 ID는 이진 문자열입니다.다음과 같이 데이터베이스의 키로 사용BINARY(n)
(고정 길이인 경우) 또는VARBINARY
가변 길이인 경우이진 버전은 기본 64 버전보다 3/4 짧습니다.
그리고 서비스상에서 base64로 전환만 하면 됩니다.
문자열을 기본 열의 유형으로 사용하는 것은 좋지 않은 접근 방식입니다. 만약 우리의 값이 순차적으로 그리고 증분 패턴으로 생성될 수 없다면, 이것은 데이터베이스 조각화를 야기하고 데이터베이스 성능을 저하시킬 수 있기 때문입니다.
언급URL : https://stackoverflow.com/questions/3455297/mysql-using-string-as-primary-key
'programing' 카테고리의 다른 글
셀레늄에서 원소의 속성을 얻는 방법 (0) | 2023.09.07 |
---|---|
유튜브 동영상 삽입 "X-Frame-Options에 의해 표시가 금지되어 문서 표시 거부" (0) | 2023.09.07 |
jQuery와 Django pagation을 사용하여 데이터의 페이지를 추가하는 방법? (0) | 2023.09.07 |
큰 글씨체가 멋진 아이콘으로 텍스트를 세로로 가운데 맞추는 방법은 무엇입니까? (0) | 2023.09.07 |
INT 열에 NULL 값 삽입 (0) | 2023.09.07 |