찾다

 >  Q&A  >  본문

java - 테이블의 기본 키에 대한 질문

대부분의 기본 키는 정수(자동 증가) 또는 시스템 생성 고유 코드(예: UUID)여야 합니다. 이 두 가지 각각의 장단점이 무엇인지 묻고 실제 경험에 대해 이야기하고 싶습니다.

过去多啦不再A梦过去多啦不再A梦2750일 전659

모든 응답(4)나는 대답할 것이다

  • 習慣沉默

    習慣沉默2017-05-17 10:00:34

    자동 증가 ID는 저장 공간을 절약하며, 기본 키 인덱스는 삽입 및 재정렬 문제가 없으며 단점은 데이터 양이 제한되어 있으며 최대 2^63개의 레코드를 저장할 수 있다는 것입니다.
    uuid는 일반적으로 정수보다 더 많은 저장 공간을 소비하는 문자열이며 삽입 중에 인덱스 재정렬이 필요합니다. 원칙적으로 수량의 상한은 없습니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-17 10:00:34

    정수형(mysql의 인덱스는 파일 형태로 저장되므로 정수형은 UUID보다 작아야 함), 정수형이기 때문에 UUID보다 확실히 인덱싱 효율이 높지만, 자동으로 증가되며, mysql 데이터가 삽입될 때마다 테이블을 잠가야 하므로 동시성이 많아 MySQL 서버에 큰 오버헤드가 발생합니다. 그리고 동시성 처리에 있어서 UUID는 정수 자동 증가보다 낫습니다

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-17 10:00:34

    uuid는 하위 라이브러리를 지원합니다

    회신하다
    0
  • 習慣沉默

    習慣沉默2017-05-17 10:00:34

    필드가 기본 키인 경우 정수 유형은 문자열 유형보다 공간을 절약합니다(int는 4바이트만 필요하고 char은 문자당 1바이트를 갖는다는 점을 기억해야 합니다)
    필드가 기본 키가 아닌 경우 공간 절약, 정수 유형은 문자열 유형보다 더 많은 공간을 절약합니다. 유형이 훨씬 빠르고 문자 길이에 따라 기하학적으로 늘어납니다

    완벽함을 추구하는 사람들을 위해 IP 주소 등의 데이터도 정수를 사용하여 데이터베이스에 저장됩니다(IP 주소 문자열과 정수에는 고정된 알고리즘이 있음).

    예를 들어 필드 값이 1234567890이고 기본 키가 없는 경우
    id >= '1234567890'인 SQL 쿼리를 수행하는 경우
    int 유형은 한 번만 비교하면 됩니다.
    char 유형은 각각 10번 비교해야 합니다. 캐릭터 모두가 비교에 참여해야 합니다. 따라서 문자가 길어질수록 속도는 느려집니다

    데이터베이스의 데이터 양이 충분히 크다면 유사한 SQL을 실행하여 char 유형 처리 속도를 쉽게 확인할 수 있습니다.
    where id like '123%'limit 5;
    where id like '1234%'limit 5;
    where id like '12345%'limit 5;
    where id like '123456%'limit 5;
    위 SQL의 실행 속도는 차례로 느려집니다. 문자가 길수록 비교 횟수가 많아지기 때문입니다.

    int 유형의 길이에 관계없이 한 번만 비교됩니다

    회신하다
    0
  • 취소회신하다