새 데이터베이스 항목을 삽입하는 것이 항목이 존재하는지 먼저 확인하는 것보다 빠릅니까?
데이터베이스 항목이 있는지 확인하고 누락된 경우 삽입하는 것보다 삽입을 실행한 후 실패하도록 하는 것이 더 빠르다는 말을 들은 적이 있습니다.
또한 대부분의 데이터베이스가 쓰기보다는 읽기에 많이 최적화되어 있기 때문에 느린 삽입보다는 빠른 확인이 더 빠르지 않을까요?
예상 충돌 횟수에 대한 질문입니까? (즉, 엔트리가 이미 존재할 가능성이 낮은 경우에만 삽입하는 것이 더 빠릅니다.)실행 중인 데이터베이스 유형에 따라 달라집니까?그리고 이 문제에 대해서는 오류 로그에 삽입 오류를 지속적으로 추가하는 방법을 사용하는 것이 잘못된 관행입니까?
감사해요.
인덱스 위반으로 인해 삽입이 실패하는 경우 레코드가 존재하는지 확인하는 것보다 최대 약간 느립니다.(둘 다 인덱스에 값이 포함되어 있는지 확인해야 합니다.)삽입이 성공할 경우 두 개의 쿼리를 실행하는 것이 하나를 실행하는 것보다 현저히 느립니다.
사용가능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
'programing' 카테고리의 다른 글
Safari/Chrome 텍스트 입력/텍스트 영역 야광 제거 (0) | 2023.10.31 |
---|---|
git 원격 분기 풀에서 원격 참조를 찾을 수 없습니다. (0) | 2023.10.26 |
최대값에서 왼쪽 조인 (0) | 2023.10.26 |
성능 손실을 감수하면서 'if' 문으로 두 개의 유사한 커널을 통합해야 합니까? (0) | 2023.10.26 |
값을 통화로 설정(in)값을 통화로 설정(in) (0) | 2023.10.26 |