행이 변경되었는지 확인하고 변경된 경우 업데이트해야합니다. 내 프로그램에는 새 값이있는 사전과 DB에있는 행의 이전 정보가있는 두 번째 사전이 있습니다.
두 가지 접근 방식을 염두에 두었습니다.
옵션 A 행 값과 비교하여 사전을 반복하고 다른 경우 모든 필드를 중단하고 업데이트합니다. 즉 UPDATE 문에는 모든 필드와 해당 값이 포함됩니다.
코드 (이 경우에는 파이썬이지만 이해하기 매우 쉽습니다)는 다음과 같습니다.
for key, value in incoming_dictionary.iteritems():
if old_dictionary[key] != value:
update_row(incoming_dictionary)
break
다음과 같은 SQL 문이 생성됩니다.
UPDATE mytable SET field1=... field2=... fieldN=... WHERE = ...
옵션 B 값을 비교하는 딕셔너리에 대해 루프를 수행하고 다른 딕셔너리에 저장해야하며 루프의 끝에서 행을 업데이트하여 UPDATE 문을 실제로 다른 값으로 제한합니다.
changed_fields = {}
for key, value in incoming_dictionary.iteritems():
if old_dictionary[key] != value:
changed_fields[key] = value
update_fields(changed_fields)
다음과 같은 SQL이 생성됩니다.
UPDATE mytable SET field1=... WHERE = ...
두 번째 것이 SQL 수준에서 더 효율적이어야한다고 말하고 싶지만 확실하지 않습니다. 그리고 프로그래밍 수준에서 약간의 오버 헤드가 있습니다.
MS SQL Server로 작업하고 있지만 내 프로그램은 다른 RBDMS를 처리합니다. 감사.
귀하의 질문에 대한 일반적인 답변이 없습니다. 다른 데이터베이스는 업데이트를 다르게 수행합니다. 예를 들어 MySQL은 변경 사항이없는 레코드를 업데이트하지 않습니다 (비교는 업데이트 작업의 일부 임).
일반적으로 업데이트 비용은 레코드 가져 오기, 업데이트 로깅 및 인덱스 수정을 기반으로합니다. 이러한 작업은 메모리의 데이터 변경을 넘어서는 작업입니다. 지침으로, 데이터베이스 채우기를 최적화하는 것보다 적절한 레코드를 빠르게 가져올 수있는 인덱스를 갖는 것이 더 중요합니다. 후자는 일반적으로 메모리 내 작업입니다.
이 지침은 모든 경우에 작동하지 않을 수 있습니다. 예를 들어 여러 페이지에 걸쳐있는 큰 필드가 있으면 성능에 영향을 미칩니다. 인덱스가있는 필드에 대한 업데이트는 성능에 영향을줍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다