2009-10-15 4 views
0

테이블에서 PrimaryKey로 행을 삭제할 때 약 44472 논리적 읽기가 발생합니다. 이제 테이블에는 자신의 ForeignKeys를 삭제하려는 테이블의 PK에 연결하는 5-6 개의 자식 테이블이 있습니다.단일 행 삭제의 많은 "논리적 읽기"

삭제 성능 향상을 위해 무엇을해야할지 모르겠습니다.

제안 사항?

편집 : 나는 삭제

의 queryplan을 추가

http://img384.imageshack.us/img384/6255/deleteexecutionplan.png

편집 : 내가 솔루션 (이것은 이상적인 솔루션이 있는지 확실하지)를 발견 - 그것은 응답 우는 소리에 있어요.

+0

실행 계획은 OrderDetails 및 다른 두 개의 작은 테이블에서 테이블 스캔을 보여줍니다. 해당 테이블에 자체 참조 FK가 있습니까?이 경우 인덱싱되지 않은 열에서 FK입니까? 실제 실행 계획 (.xml 형식)과 함께 테이블 및 관련 테이블의 스키마를 공유하면 원인을 정확히 말하기가 더 쉬울 것입니다 ... – KristoferA

답변

0

This answer이 문제를 해결했으며 이제는 매력과 같은 작업을 삭제합니다. 내가 알아야 할 단점이 있는지 확실하지 않습니다.

0

단일 행 삭제에 대해서는 query plan을보십시오.

하나 이상의 "하위"테이블에서 테이블 스캔이 수행되고 있음을 알게 될 것입니다. 그렇다면 그 자식 테이블에 ForeignKey에 대한 인덱스를 두는 것을 고려하십시오.

(그렇지 않으면 쿼리 계획을 질문에 추가하십시오.)

0

FK 제약이 있습니까? 내가 생각할 수있는

옵션은

  • 자식 테이블의 FK 컬럼에 인덱스를 추가합니다.
  • 제약 조건을 제거하십시오 (행이 고아가 될 위험이 있습니다).
  • 하위 테이블 수를 줄여보십시오.