2011-10-02 7 views
0

이 쿼리를 실행하려고하는데 업데이트되는 테이블의 행 수가 약 10,000 개입니다. 쿼리를 실행하는 데 너무 오래 걸리므로 반환을 기다릴조차 수 없습니다.MySQL UPDATE 쿼리 최적화

몇 시간 후이 테이블에는 100,000 개의 행이 있으므로 이미 수행 한 것보다 10 배 더 오래 걸릴 것입니다. 누구나 최적화 할 아이디어가 있습니까?

UPDATE 

`wpsapi4`.`product_details` AS `pd`, 
`r2r`.`partmaster` AS `pm`, 
`r2r`.`partpriceinv` AS `ppi`, 
`r2r`.`manufacturer` AS `m` 

SET 

`pd`.`product_name`=`pm`.`ItemName`, 
`pd`.`data_source`='R2R', 
`pd`.`partmaster`=`pm`.`id`, 
`pd`.`pu`=``.`ppi`.`DistributorPartNumberShort`, 
`pd`.`description_raw`=`pm`.`ItemDescription`, 
`pd`.`dealer_price`=`ppi`.`MSRP`, 
`pd`.`weight`=`pm`.`Weight`, 
`pd`.`vendor_name`=`m`.`ManufacturerName` 

WHERE 

(
`pm`.`ManufacturerNumberShort`=`pd`.`vendor_number` 
OR 
`pm`.`ManufacturerNumberLong`=`pd`.`vendor_number` 
) 
AND 
`pm`.`id`=`ppi`.`DistributorPartNumberShort` 
AND 
`ppi`.`DistributorID`=2 
AND 
`pm`.`ManufacturerID`=`m`.`id` 

당신이 그 다음 그렇게 말하십시오 테이블 구조와 함께 할 수 있다고 생각하는 경우

, 나는 정말이 시점에서 구조를 변경할 수 있지만 인덱스가 다음 있어야 할 곳에 알고 있다면 그것은 좋은 것입니다. 인덱스는 이미 r2r 데이터베이스에서 최적화되어 있습니다.

+0

내게는 많은 역겨운 내용이 있습니다. – Bojangles

+0

select 문을 최적화하는 것과 같은 방법으로 업데이트 문을 최적화 할 수 있습니다. 동일한 테이블 조인 및 where 절을 사용하여 동일한 쿼리에 대해 explain을 실행하여 현재 상황을 확인합니다. –

+0

@JamWaffles : 예, 내 뒤 틱을 좋아해요. 사람들은 사용하지 말라고 말하지만 무시합니다. mysql에서 처음 시작한 때와 내가 예약어를 사용하고 있었기 때문에 오류가 계속 발생했기 때문에 지금은 어디서나 역행했다. + 찾기/바꾸기를 원할 경우 도움이됩니다. – Drahcir

답변

0

색인 할 열은 where 절에서 참조하는 열입니다. pm.ManufacturerNumberShort 컬럼에 인덱스

  1. :

    는 다음과 같은 추가 고려하십시오.

  2. pm.ManufacturerNumberLong 열의 색인입니다.
  3. pm.id 열의 색인입니다.
  4. pm.ManufacturerID 열에 대한 색인입니다.
  5. ppi.DistributorPartNumberShort 열의 색인입니다.
  6. ppi.DistributorID 열의 색인입니다.

Darhazer로부터 입력 기준 :

  1. pm.ManufacturerNumberShort, pm.id 인덱스 및 pm.ManufacturerID 컬럼 :

    는 다음 중 하나 이상을 추가 고려 .

  2. pm.ManufacturerNumberLong, pm.id 및 pm.ManufacturerID 열에 대한 색인입니다.
  3. ppi.DistributorPartNumberShort 및 ppi.DistributorID 열의 색인입니다.
+0

단일 색인은 복합 인수만큼 빠르지 않습니다 (index_merge가 사용되거나 하나의 색인이 where 절을 해결하기 위해 선택되어야 함). 업데이트의 경우 모든 색인은 쓰기에 필요한 시간을 추가합니다. –

0

공급 업체 번호가 OR 인 경우 두 공급 업체 번호에 대해 색인을 작성해야합니다.

다른 열에 이미 색인이 있어야합니다.

+0

@lcarus : 실제로 r2r이라는 데이터베이스의 테이블은 이미 완벽하게 최적화되어 있으며 모든 곳에서 색인이 생성됩니다. 지금이 product_details 테이블에서 작업 중이며 속도가 느려질 수있는 일부 비표준 필드 유형을 볼 수 있습니다.그것은 varchar (500) 등의 것들을 가지고 있는데, 나는 그것이 가능하다고 생각조차하지 못했습니다. Lol – Drahcir