현재 테이블에 값을 가져 와서 "정상화"하도록 MySQL에 저장 프로 시저를 작성했습니다. 즉, 저장 프로 시저에 전달 된 각 값에 대해 값이 이미 테이블에 있는지 여부를 확인합니다. 만약 그렇다면, 그 행의 id를 변수에 저장합니다. 값이 테이블에 없으면 새로 삽입 된 값의 ID를 저장합니다. 스토어드 프로시 저는 id를 취하여 원래의 비표준화 된 테이블과 동일한 테이블에 삽입하지만이 테이블은 완전히 정규화되고 주로 외래 키로 구성됩니다.MySQL 정규화 저장 프로 시저 성능
이 디자인의 문제점은 저장 프로 시저가 약 10ms 정도 걸리므로 약 10million 레코드를 처리 할 때 너무 길다는 것입니다. 내 의구심은 퍼포먼스가 내가 인서트를하는 방식과 관련이 있다는 것이다. 즉
INSERT INTO TableA
(first_value)
VALUES
(argument_from_sp) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);
SET @TableAId = LAST_INSERT_ID();
를 "ON DUPLICATE KEY UPDATE는"때문에 중복 키에 난 아무것도 업데이트가 아니라 단지 행의 id 값을 반환하고 싶지 않은 사실, 해킹의 비트입니다. 이 단계를 놓친 경우 LAST_INSERT_ID() 함수는 "SET ..."문을 실행하려고 할 때 잘못된 값을 반환합니다.
누구든지 MySQL에서 더 좋은 방법을 알고 있습니까?
고유 식별자는 그렇지 않으면 VARCHAR 필드입니다. 성능상의 이유로 정수 필드를 선호합니다. – srkiNZ84
고유 식별자는 여전히 varchar 필드입니다. 당신이 한 것은 테이블에 다른 컬럼과 또 다른 유일한 인덱스를 추가하는 것뿐입니다. 정수 고유 식별자는 아무런 목적도 가지고 있지 않으며, 느려지지 않을 것입니다. 응용 프로그램의 모든 부분을 벤치마킹하는 것은 좋은 생각이었으며, 중요한 사항에 집중할 수있게되었습니다. –