UUID를 숫자로 저장하는 방법은 무엇입니까?
질문에 대한 답변 인 MySQL의 UUID 성능 에 따라 답변 하는 사람은 UUID를 문자열이 아닌 숫자로 저장하도록 제안합니다. 어떻게 할 수 있는지 잘 모르겠습니다. 누구든지 나에게 뭔가를 제안 할 수 있습니까? 내 루비 코드가 어떻게 처리합니까?
올바르게 이해했다면 기본 열에서 UUID를 사용하고 있습니까? 사람들은 일반 (정수) 기본 키가 더 빠를 것이라고 말할 것이지만 MySQL의 어두운면을 사용하는 또 다른 방법이 있습니다. 실제로 MySQL은 인덱스가 필요할 때 다른 어떤 것보다 바이너리를 사용하는 것이 더 빠릅니다.
UUID는 128 비트이고 16 진수로 작성되기 때문에 UUID의 속도를 높이고 저장하는 것은 매우 쉽습니다.
먼저 프로그래밍 언어에서 대시를 제거하십시오.
에서 110E8400-E29B-11D4-A716-446655440000
로 110E8400E29B11D4A716446655440000
.
이제 32 자입니다 (MD5 해시처럼 작동 함).
BINARY
MySQL 의 단일 크기는 8 비트 이므로 BINARY(16)
UUID의 크기입니다 (8 * 16 = 128).
다음을 사용하여 삽입 할 수 있습니다.
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
다음을 사용하여 쿼리합니다.
SELECT HEX(FieldBin) AS FieldBin FROM Table
이제 프로그래밍 언어에서 원래 UUID와 일치하도록 9, 14, 19 및 24 위치에 대시를 다시 삽입하십시오. 위치가 항상 다른 경우 해당 정보를 두 번째 필드에 저장할 수 있습니다.
전체 예 :
CREATE TABLE `test_table` (
`field_binary` BINARY( 16 ) NULL ,
PRIMARY KEY ( `field_binary` )
) ENGINE = INNODB ;
INSERT INTO `test_table` (
`field_binary`
)
VALUES (
UNHEX( '110E8400E29B11D4A716446655440000' )
);
SELECT HEX(field_binary) AS field_binary FROM `test_table`
16 진수 문자열에이 기술을 사용하려면 항상 length / 2
필드 길이를 사용하십시오. 따라서 sha512의 BINARY (64)
경우 sha512 인코딩 길이가 128 자이므로 필드가 됩니다.
Percona 블로그에는 귀하의 질문에 답하는 기사 (벤치 마크 포함)가 있습니다. 최적화 된 방식으로 UUID 저장 .
바이너리를 사용하는 것이 좋은 생각이라고 생각하지 않습니다.
어떤 값을 쿼리하고 싶다고 가정 해 보겠습니다.
SELECT HEX(field_binary) AS field_binary FROM `test_table`
여러 값을 반환하는 경우 HEX 함수를 여러 번 호출합니다.
그러나 주요 문제는 다음 문제입니다.
SELECT * FROM `test_table`
where field_binary=UNHEX('110E8400E29B11D4A716446655440000')
그리고 where 내부의 함수를 사용하면 단순히 인덱스를 무시합니다.
또한
SELECT * FROM `test_table`
where field_binary=x'skdsdfk5rtirfdcv@#*#(&#@$9'
많은 문제를 일으킬 수 있습니다.
참고 URL : https://stackoverflow.com/questions/10950202/how-to-store-uuid-as-number
'Programing' 카테고리의 다른 글
풀 요청시 브랜치 이름 바꾸기 (0) | 2020.10.22 |
---|---|
:: content / :: slotted 가상 요소는 무엇이며 어떻게 작동합니까? (0) | 2020.10.22 |
grep에서 큰 따옴표 이스케이프 (0) | 2020.10.22 |
새 형식 문자열로 변수 데이터 로깅 (0) | 2020.10.22 |
각 행에 대해 가장 큰 값의 열 이름을 반환합니다. (0) | 2020.10.22 |