저는 개발자이며 많은 양의 레코드가있는 테이블을 관리하는 중 문제가 있습니다.대용량 레코드 테이블 삽입 문제 Mysql
5 ~ 6 개의 열과 약 4,000,000 ~ 5,000,000 개의 행을 가진 기본 테이블 (표 A)의 데이터를 채우기 위해 cron 작업을 실행하고 있고이 테이블의 다른 테이블과 데이터를 계속 작성하면 시간이 지남에 따라 증가한다.
표 A 원시 데이터를 포함하고 내 출력 테이블은
내 크론 스크립트는 다음 표 B에 데이터를 자릅니다 선택 쿼리 위
TRUNCATE TABLE_B;
INSERT INTO TABLE_B (field1, field2)
SELECT DISTINCT(t1.field2), t2.field2
FROM TABLE_A AS t1
INNER JOIN TABLE_A t2 ON t2.field1=t1.field1
WHERE t1.field2 <> t2.field2
GROUP BY t1.field2, t2.field2
ORDER BY COUNT(t1.field2) DESC;
약 1,50,000을 생산하는 선택 쿼리를 사용하여 데이터를 삽입 표 B입니다 2,00,000 행
에 지금은 표 B를 채우는 데 너무 많은 시간이 걸리고 내 응용 프로그램은 선택 쿼리가 실패 표 B에 액세스하려고 한편 경우
설명하면서 쿼리 결과 다음
'1','PRIMARY','T1','ALL','field1_index',NULL,NULL,NULL,'431743','Using temporary;Using filesort'
'1','PRIMARY','T2','ref','field1_index','field1_index','767','DBNAME.T1.field1','1','Using where'
사람이 프로세스를 개선 도와, 또는 나에게 위의 과정에 대한 대안을 안내 주시겠습니까?
감사
Suketu
이러한 유형의 질문이 제기되었습니다. http://stackoverflow.com/questions/2838828/bulk-insert-problem-in-mysql – Ankit
EXPLAIN 구문을 유용하게 사용하려면 두 테이블에 대해 'SHOW CREATE TABLES'출력을 포함하십시오. –
'TABLE_A' ( 'id'의 INT (11) 부호 NOT NULL AUTO_INCREMENT, 'field1'의 VARCHAR (255) NULL NOT, 'field2'의 VARCHAR (255) NULL NOT TABLE을 만들 code', 'count_field3'의 INT (10) 부호 NULL NOT, 'field_4'의 INT (10) 부호 NOT NULL, PRIMARY KEY ('id'), KEY'field2_index' ('field2'), KEY'field1_index' ('field1') ) ENGINE = MyISAM AUTO_INCREMENT = 435692 DEFAULT CHARSET = utf8'code' – Suketu