source

텍스트 값이 중복된 표 열

manysource 2022. 11. 4. 23:31

텍스트 값이 중복된 표 열

데이터베이스 테이블이 있으며,그 테이블에는 varchar(200) 컬럼이 있습니다.
이 테이블은 이력 로그 정보가 포함된 테이블입니다.테이블 행의 약 99.9%가 테이블 내의 다른 행과 동일한 텍스트메시지를 포함하고 있습니다.
데이터베이스의 크기와 검색 속도가 문제가 되고 있습니다.

그래서 varchar 값을 고유한 텍스트 값이 있는 다른 테이블로 이동한 다음 첫 번째 테이블의 모든 행에 대해 해당 테이블을 참조할 수 있다고 생각했습니다만, 변경하기 전에 이 작업을 보다 쉽게 수행할 수 있는 방법이 있는지 알고 싶습니다.
예를 들어 기존 테이블 열에 이 동작을 자동으로 발생시키는 속성을 설정합니다.따라서 데이터베이스는 고유한 텍스트가 있는 테이블을 자동으로 유지합니다.삭제 조작에 큰 영향을 주는 것은 알고 있습니다만, 그 작업은 거의 행해지지 않습니다.또, 로그 테이블에 삽입하는 프로그램의 변경은 피하고 싶다고 생각하고 있습니다.

MySQL을 사용하고 있습니다만, 다른 DB가 이것을 할 수 있다면, 다른 DB를 변경할 수도 있습니다.(MariaDB 또는 기타)

감사해요.

이를 처리할 수 있는 속성은 없지만 varchar 데이터를 별도의 테이블에 저장하는 것이 좋습니다.그러기 위해서는, 다음의 순서에 따릅니다.

  1. 다음과 같이 varchar 데이터를 유지하는 테이블을 만듭니다.

    CREATE TABLE log_messages (id int auto_increment primary key, message varchar(200)) ENGINE = MyISAM ROW_FORMAT=FIXED;

  2. varchar 데이터 삽입

    INSERT INTO log_messages (message) SELECT DISTINCT your_varchar_column FROM your_table;

  3. 새 log_messages 테이블을 참조할 새 열을 원래 테이블에 추가합니다.

    ALTER TABLE your_table ADD COLUMN message_id int not null;

  4. 참조 작성

    UPDATE your_table y INNER JOIN log_messages m ON y.your_varchar_column = m.message SET y.message_id = m.id;

  5. 그런 다음 테이블에서 varchar 열을 놓을 수 있습니다.

    ALTER TABLE your_table DROP COLUMN your_varchar_column;

이렇게 된 이상 삭제 작업에 대한 성능 저하가 우려되는 이유를 잘 모르겠습니다.없어요.

이것이 정규화를 하는 올바른 방법이지만, 제 조언은 숫자(정수)를 사용하는 것이 아니라.....

언급URL : https://stackoverflow.com/questions/21253592/table-column-with-duplicated-text-values