전 테이블에 인덱스를 FULLTEXT하려고합니다. 이 테이블은 3 백만 레코드를 포함합니다. Alter 테이블 문 또는 Create index 문을 사용하여 해당 인덱스를 삽입하는 것은 매우 어려웠습니다. 따라서 새 테이블을 만들고 첫 번째 인덱스를 추가하고 데이터를로드하는 가장 쉬운 방법입니다. 새로 만든 테이블에 기존 테이블 데이터를로드하려면 어떻게합니까? Xammp MySql 데이터베이스를 사용하고 있습니다.새로 생성 된 테이블에 거대한 데이터 세트를로드하는 방법은 무엇입니까?
답변
INSERT INTO newTable SELECT * FROM oldTable;
새 테이블과 색인이 작성되면. 모든 열을 복사하려고합니다. 특정 열을 선택할 수도 있습니다.
기존 테이블에 전체 텍스트 인덱스를 만드는 것이 왜 어려운지 알 수 없습니다. 당신은 할 수 :
create fulltext index idx_table_col on table(col)
일반적으로는 사전 정의 된 인덱스가 빈 테이블로 데이터를로드하는 것보다 이미 테이블을로드하기 위해 인덱스를 추가하는 것이 빠릅니다.
편집 :
당신은 insert
를 사용하여로드 할 수 있습니다. 다음은 처음으로 10 만 행을 삽입합니다 : 당신은 (MySQL의 또는 응용 프로그램 수준에서 저장 프로 시저를 통해) 루프에서이 넣을 수
insert into newtable
select *
from oldtable
order by id
limit 0, 100000;
. 아마도 이것은 더 빨리 돌아올 것입니다. 실행할 때마다 limit
의 오프셋 값을 변경합니다.
인덱스를 만드는 데 드는 전체 시간은 insert
보다 적을 것으로 예상되지만, 더 편리 할 수도 있습니다.
잘 모르겠습니다 - 색인 생성으로 인해 표가 사용되지 못하게 될 수 있습니다. 따라서 테이블을 별도로 만들고 인덱스가 이미 생성 된 상태에서 테이블에 데이터를로드 한 다음 테이블 만 전환하려는 경우가 있습니다. 그러나 나는 이것이 매우 특별한 경우이며, 오히려 런타임 변경 지향적이라는 것을 알고 있습니다. – Uhla
@ Gordon Linoff 실제로 테이블을 변경하여 인덱스를 작성하려고 할 때 브라우저가 생성되어 대기하고 내 컴퓨터를 찔렀다. 열과 램은 약 70 %로 이동합니다. 나는 그 이유를 모른다. 그게 내 테이블에 약 3 백만이 들어있는 이유야? – Maduri
색인을 생성하는 열의 크기는 얼마나됩니까? – Uhla
새로 만든 테이블의 열 이름을 어디에 두겠습니까? – Maduri
이 구문은 새 테이블에 이전 테이블과 동일한 열 이름과 유형이 있다고 가정합니다. 자세한 내용은 http://www.w3schools.com/sql/sql_insert_into_select.asp를 참조하십시오. – Uhla