14 억 개의 레코드가있는 테이블이 있습니다. 테이블 구조는 다음과 같습니다.
CREATE TABLE text_page (
text VARCHAR(255),
page_id INT UNSIGNED
) ENGINE=MYISAM DEFAULT CHARSET=ascii
열에 대한 색인을 작성해야합니다 text
.
테이블 크기는 약 34G입니다.
다음 문장으로 색인을 만들려고했습니다.
ALTER TABLE text_page ADD KEY ix_text (text)
10 시간을 기다린 후에 마침내이 접근법을 포기했습니다.
이 문제에 대한 해결책이 있습니까?
UPDATE : 테이블을 업데이트하거나 삽입하거나 삭제할 수 없습니다. 컬럼에서 인덱스를 작성하는 이유 text
는 다음과 같은 종류의 SQL 쿼리가 자주 실행되기 때문입니다.
SELECT page_id FROM text_page WHERE text = ?
업데이트 : 테이블을 분할하여 문제를 해결했습니다.
테이블은 열에서 40 개로 분할됩니다 text
. 그런 다음 테이블에서 인덱스 작성을 완료하는 데 약 1 시간이 걸립니다.
테이블 크기가 매우 커지면 MySQL 인덱스 생성이 매우 느려집니다. 그리고 파티셔닝은 테이블을 더 작은 트렁크로 줄입니다.
CREATE INDEX
진술 을 사용하는 데 무엇이 문제입니까 ?