2011-05-05 3 views
3

대부분의 시간은 기존 레코드를 업데이트 할 것이라고 쿼리합니다. 그러나이 레코드가 존재하는지 확인해야하며 그렇지 않으면 작성해야합니다.MySql 성능 : INSERT ... 중복 키 업데이트 또는 업데이트 및 ROW_COUNT

보통 나는 INSERT...ON DUPLICATE KEY UPDAT을 사용하지만, 같은 몇 쿼리 내가 반환 ROW_COUNT()가 0이면과 UPDATE와 후자의 확인을 수행하고이 경우에 INSERT을하고 생각하고 있었는데 삽입해야합니다.

무엇이 최고의 성능을 제공합니까?

+2

나는 그것을 시도해야한다고 생각한다. 고유 한 키 검색은 두 가지 방법으로 수행되며 첫 번째 선택 (INSERT ... ON DUPLICATE KEY UPDAT)은 약간 더 좋습니다. 수만 건의 기록으로 시험 해보고 결과로 돌아 오십시오. 몇 분 정도 걸릴거야. :) – bpgergo

+0

사실 나는 새 레코드를 나타 내기 위해 응용 프로그램에서 플래그를 보내 주변에서 작업했습니다. 이것은 확실히 최고의 성능을 발휘할 것입니다. 나중에 제안한대로 시도해 보겠습니다. 하지만 고유 검사가 어쨌든 완료되면 update 및 row_cound보다 성능이 좋아야합니다. 고맙습니다! – IgalSt

+0

앱의 플래그를 신뢰할 때주의 : 여러 사용자가 동일한 앱을 동시에 사용하는 경우 사용자 중 한 명이 레코드를 추가하는 순간 플래그가 유효하지 않을 수 있습니다! 'INSERT ... ON DUPLICATE KEY UPDATE' 접근법을 사용하는 편이 낫다. 그런데이 쿼리를 수행하는 것에 대해 정말로 염려 할 필요가 있습니까? 이러한 쿼리를 많이 수행하면 성능에 영향을 미칠 수 있습니다. – Bart

답변

1

MySQL에는 찾고자하는 REPLACE INTO 구문이 있습니다. 그것이 당신을 위해 작동하지 않는다면, UPDATE를 사용하고 ROW_COUNT()가 작동하는지 검사하면 저장된 모든 proc 파일을 랩핑하여 서버로 되돌아 갈 수 있습니다.

관련 문제