2014-02-24 2 views
0

하나의 데이터베이스에 두 개의 테이블이 약 50,000 ~ 70,000 개의 행을 가지고 있습니다. 둘 다 MyISAM입니다. 첫 번째 yahooprices에는 품목 및 가격 (열 가격)에 대한 SKU 코드 (열 코드)가 들어 있습니다. 두 번째 테이블 인 combined_stock에는 partnumber (코드와 동일한 정보이지만 다르게 정렬 됨), 가격, 수량 및 설명이 포함됩니다. 가격은 현재 FLOAT 10,2로 정의되고 0.00으로 설정됩니다. 나는이 문을 사용하여 combined_stock하는 (또한 10,2을 FLOAT) yahooprices에서 가격을 세워 시도하고있다 :비정상적으로 오래 걸리는 MySQL 문

UPDATE combined_stock dest LEFT JOIN (
SELECT price, code FROM yahooprices 
) src ON dest.partnumber = src.code 
SET dest.price = src.price 

나는 작은 테스트 양에 그것을 시도하기 때문에이 사항이 일을 알고있다. 그것들은 partnumber와 코드를 고유하지 않은 인덱스로 갖는다. 나는 또한 쿼리 속도를 높일 수 있는지 알아보기 위해 두 테이블 모두에 대한 인덱싱 가격을 시도했습니다. 엄밀히 말하면 몇 초 안에 끝내야하지만 마지막으로이 작업을 실행 해 보았지만 밤새 앉아서 작업을하지 못했다고 확신합니다. 누구든지 문제 해결 권장 사항이 있습니까?

+0

관련 열에 대한 데이터 구조, 특히 각 테이블의 데이터 구조를 공유하십시오. 데이터 유형, 색인 (및 유형) 등 –

+1

왼쪽 가입은 왜하고 있습니까? 더욱 중요한 것은 왜 같은 장소에 두 곳의 데이터를 저장하고있는 것입니까? –

답변

0

나는 비교적 작은 변화를 제안합니다. 먼저 하위 쿼리를 제거합니다. 둘째, 내부 조인으로 전환하십시오.

UPDATE combined_stock dest JOIN 
     yahooprices src 
     ON dest.partnumber = src.code 
    SET dest.price = src.price; 

마지막으로 yahooprices(code, price)에 색인을 생성하십시오.

일치 항목이 없을 때 NULL으로 가격을 설정하려면 left outer join을 그대로 둘 수 있습니다.

+0

이것은 완벽하게 작동했습니다. 계산서에는 0.7ms가 걸렸다. – Kazoou

관련 문제