문자열에서 정수까지의 맵이 있습니다. MySQL 데이터베이스에서이지도를 저장하려면 나는 다음과 같은 테이블 생성 :MySQL 데이터베이스의 TEXT 열을 인덱싱하는 올바른 방법입니까?
CREATE TABLE map(
Argument TEXT NOT NULL,
Image INTEGER NOT NULL
)
길이가 예측 불가능하기 때문에이 인수의 텍스트 유형을 선택을, 현재 가장 긴 기록은 2290 개 문자를 가지고 있으며, 평균 길이는 88 개 문자입니다.
성능 문제가 발생하여 Argument
열에 인덱스를 추가하려고했지만 길이를 지정해야한다는 것을 알았으므로이 제한을 피하기 위해 해시 값 (md5 또는 기타)을 포함하는 새로운 정수 열을 추가했습니다. 열 값을 인수로 지정하십시오.
ALTER TABLE map ADD COLUMN ArgumentHash INTEGER;
그리고 성능에 대한 문제가 사라졌습니다 그 이후로 결합 인덱스
CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80));
. 이 문제를 해결하는 올바른 방법인지 여부를 묻고 싶습니다.
TEXT와 달리 VARCHAR가 인라인으로 저장되고 자주 액세스하는 데이터에 대해 더 나은 성능을 제공하므로 VARCHAR이 인덱스에 사용할 수있는 더 좋은 열 유형이라는 것을 알게되었습니다. http://stackoverflow.com/users/144287/brenton-alker –