2011-02-10 3 views
0

30M + 행이있는 테이블이 있으며 각 인덱스 업데이트가 비쌉니다. 때때로 하나의 삽입물에 5000 개 이상의 행을 업데이트하거나 추가해야합니다. 모든 행이 새로운 행인 경우가 있습니다. 일부는 새로운 행인 경우가 있습니다.하나의 중복 된 업데이트 xx에 삽입 - 테이블의 INDEXes도 업데이트합니까?

업데이트를 사용할 수 없습니다. 어떤 것이 이미 테이블에 있는지 모르므로 INSERT ..를 사용합니다. 단일 열에 중복 키 업데이트를 사용합니다.

가끔은 5 초를 초과하는 많은 시간이 걸립니다.

더 좋은 방법이 있습니까? 어쩌면 내가 충분히 자신을 설명하지 않았다 :)

답변

0

5000 + 별도의 삽입 문을 발행하고 있습니까? 그렇다면 삽입 작업을하는 동안 테이블을 잠급니다. 그것은 훨씬 더 빨리 갈 것입니다.

+0

mmm. 저는 5000 개의 행을 분리 된 값을 가진 하나의 삽입물에 넣었습니다. 테이블을 잠그고 효과를 볼 수 있습니다. – sbargay

+0

이미 단일 삽입 문에있는 경우 테이블을 잠그면 차이가 발생하지 않습니다. INSERT 대신에 REPLACE를 사용하면 어떻게됩니까? – awm

+0

잠금이 많이 변경되지 않았습니다. 교체가 많은 문제가 될 것입니다. 인덱스를 다시 작성하지 않습니까? – sbargay

0

삽입을 수행하기 위해 BEGIN TRANSACTION 및 COMMIT를 추가했으며 성능을 x4에서 x10으로 향상 시켰습니다.

관련 문제