2014-08-28 2 views
0

누군가가 조언을 할 수 있지만, 다음 조인 문을 매우 긴 처리 시간이 발생하고 성능 향상에 대한 제안을 얻기를 바라고 있습니다. 두 테이블 모두 각각에 수백만 개의 레코드가 있으며 열 인덱스가 있지만이 조인을 실행하는 데는 70 시간 이상이 걸립니다.Mysql 매우 느림 합류 성능

update <table x> a 
left join <table y> b 
on a.PARENT_ID=b.ID and a.LOAD_ID=b.LOADID      
set a.DATETIME=str_to_date(b.`DateTime`, '%m/%d/%Y %H:%i:%s'), a.ROOM_ID=b.ConID, a.STATUS='Exited' 
where a.PARENT_ID=b.ID and a.LOAD_ID=b.LOADID and a.PROCESSING_FLAG = 0 and b.PROCESSING_FLAG = 0 

그래서 테이블 X는 66m 기록을 가지고 있으며, 테이블 Y는 44m를 가지고 있지만이 44m 기록, 하위 집합 만 모든 66m 기록에 가입되지 않습니다 PROCESSING_FLAG를 사용하여. a.Parent_Id, b.ID, a.Load_ID, b.LoadID, a.Room_ID, b.ConID, a.Processing_Flag 및 b.Processing_Flag에 열 인덱스가 있습니다. 두 테이블 모두 MYISAM을 사용하며 MySQL 5.6.17을 사용하고 있습니다.

이 문장의 성능을 향상시키기 위해 할 수있는 일이 있습니까? 나는 키 버퍼를 아마도 6G로 증가시키는 것을 첫 걸음으로 생각했다.

+0

EXPLAIN을 통해 실행하여 실제로 생각하는 인덱스를 사용하고 있는지 확인 했습니까? –

+0

PROCESSING_FLAG는 분명히 0 또는 1이므로 카디널리티는 쓸모가 없습니다. 인덱싱 여부에 관계없이 MySQL은 특정 레코드가 필요하지 않음을 결정하기 위해 전체 데이터 세트를 계속 이동합니다. 해당 쿼리에서 효율적인 인덱스 사용에 대한 만족스러운 기준은 하나도 없습니다. 다음 바보 같은 것은 당신이 MyISAM을 어떤 이상한 이유로 사용하고 있다는 것입니다. 그래서 RAM은 작업 데이터 세트의 핫 복사본을 저장하는 데 거의 사용되지 않기 때문에 I/O 경계입니다. RAM을 효율적으로 활용할 수있는 고급 스토리지 엔진을 사용하지 않고도 최적화 할 수 있을지는 의문입니다. –

+0

아직 실행 중이며 테이블을 잠근 상태입니다. – user1236443

답변

-1

MYISAM은 (는) 작업을 선택하는 것이 가장 좋습니다. 당신의 데이터베이스가 좋은 사용자와 함께 매우 무겁다면. 업데이트 작업에 시간이 걸립니다.

색인 열과 조인을 시도하십시오. 참여가 잘 될 것입니다.

는 인덱스 컬럼과 조인을 수행하지 않는 것이 조인/그녀 join_buffer_size에게 책임을 할당 메모리에

join_buffer_size 서버 변수를 증가하라고 MySQL 서버 관리자와 통신 I이 당신을 도움이되기를 바랍니다

.

+0

-1 잘못된 정보 제공. –

+0

@NB 허위 정보 란 무엇입니까? 진실을 말해 줄 수 있습니까? – PankajR

+0

MyISAM은 적은 수의 읽기 전용 사용자로 더 좋을 수 있지만 그 이상은 아닙니다. 또한 충돌 방지 기능이 거의 없으므로 실제로 프로덕션 환경에서 사용하고 싶지는 않습니다. – Synchro