programing

새 데이터베이스 항목을 삽입하는 것이 항목이 존재하는지 먼저 확인하는 것보다 빠릅니까?

newstyles 2023. 10. 26. 20:49

새 데이터베이스 항목을 삽입하는 것이 항목이 존재하는지 먼저 확인하는 것보다 빠릅니까?

데이터베이스 항목이 있는지 확인하고 누락된 경우 삽입하는 것보다 삽입을 실행한 후 실패하도록 하는 것이 더 빠르다는 말을 들은 적이 있습니다.

또한 대부분의 데이터베이스가 쓰기보다는 읽기에 많이 최적화되어 있기 때문에 느린 삽입보다는 빠른 확인이 더 빠르지 않을까요?

예상 충돌 횟수에 대한 질문입니까? (즉, 엔트리가 이미 존재할 가능성이 낮은 경우에만 삽입하는 것이 더 빠릅니다.)실행 중인 데이터베이스 유형에 따라 달라집니까?그리고 이 문제에 대해서는 오류 로그에 삽입 오류를 지속적으로 추가하는 방법을 사용하는 것이 잘못된 관행입니까?

감사해요.

인덱스 위반으로 인해 삽입이 실패하는 경우 레코드가 존재하는지 확인하는 것보다 최대 약간 느립니다.(둘 다 인덱스에 값이 포함되어 있는지 확인해야 합니다.)삽입이 성공할 경우 두 개의 쿼리를 실행하는 것이 하나를 실행하는 것보다 현저히 느립니다.

사용가능INSERT IGNORE키가 이미 존재하는 경우 insert 명령이 무시되고 그렇지 않으면 새 행이 삽입됩니다.이렇게 하면 중복된 값을 확인하고 새 값도 삽입하는 단일 쿼리를 실행해야 합니다.
INSERT GNORGE는 모든 오류를 경고로 바꾸므로 주의해야 합니다.삽입 무시를 위해 이 게시물 읽기
중복 키 무시?

INSERT IGNERT INTO..를 사용하면 삽입하거나 무시할 수 있습니다.IGNERT 키워드를 사용하는 경우 INSERT 문을 실행하는 동안 발생하는 오류는 대신 경고로 처리됩니다.예를 들어, IGNORY가 없으면 테이블에서 기존 UNIQUE 인덱스 또는 Primary KEY 값을 복제하는 행이 중복 키 오류를 발생시키고 문이 중단됩니다.IGNORE를 사용하면 행이 여전히 삽입되지 않지만 오류는 발생하지 않습니다.

이전 값을 삭제하고 새 값을 삽입하려는 경우 REFREENT를 사용하여 INSERT 대신 REFREENT를 사용하여 이전 행을 덮어쓸 수 있습니다.

REFRANCE는 표의 이전 행이 Primary KEY 또는 UNIQUE 인덱스의 새 행과 동일한 값을 갖는 경우 새 행을 삽입하기 전에 이전 행이 삭제된다는 점을 제외하고는 INSERT와 동일하게 작동합니다.

그렇지 않으면 INSERT IGNERT가 삽입되거나 무시되므로 사용합니다.

테이블에서 기존 UNIUIC 인덱스 또는 Primary KEY 값을 복제하는 행은 중복 키 오류를 발생시키고 문이 중단됩니다.IGNORE를 사용하면 행이 여전히 삽입되지 않지만 오류는 발생하지 않습니다.

새 레코드인 경우 삽입하거나 레코드가 이미 존재하는 경우 업데이트하려는 의도가 있다면 UPSERT를 수행하는 것은 어떻습니까?

체크아웃 - http://vadivel.blogspot.com/2011/09/upsert-insert-and-update-in-sql-server.html

레코드의 존재 여부를 확인하는 대신 직접 업데이트를 시도할 수 있습니다.일치하는 레코드가 없는 경우 @@RowCount는 0이 됩니다.이를 바탕으로 새로운 레코드로 삽입할 수 있습니다.[SQL Server 2008에서는 MERGE 개념을 사용할 수 있습니다.]

EDIT: 참고하십시오. MS SQL Server에 적합하다는 것을 알고 MySQL이나 ORACLE에 대해서는 모릅니다.

언급URL : https://stackoverflow.com/questions/8936922/is-inserting-a-new-database-entry-faster-than-checking-if-the-entry-exists-first