2016-11-14 1 views
1
delete from VA_demo_setup_NCSC_temp 
    where exists 
    (select * 
    from VA_demo_setup_enrolled va 
    where VA_demo_setup_NCSC_temp.student_id = va.student_id 
     and VA_demo_setup_NCSC_temp.academic_period = va.academic_period); 

비슷한 게시물을 보았습니다. 그러나이 특정 쿼리에 왜 시간이 걸리는지 해독하지 못했습니다. ID와 마침표가 모두 데이터 세트에있는 레코드를 제거하려고합니다.삭제할 위치

+1

어떤 DBMS를 사용하고 있습니까? –

+0

사용중인 dbms에 태그를 지정하십시오. 테이블 정의를 추가하고 색인을 포함하십시오. 또한 일부 샘플 테이블 데이터와 예상되는 결과를 추가하십시오. (잘 서식이 지정된 텍스트!) – jarlh

+0

검색 필드 (id 및 academic_period)의 색인을 생성 했습니까? –

답변

2

우리가 테이블 구조와 인덱스를 발견하면 성능 저하를 설명하는 것이 쉬울 것입니다. 그러나 귀하의 질의는 다음과 같이 다시 쓰여질 수 있습니다. 이 방법이 더 효과적이라는 것을 알 수 있으며 필요한 방식으로 데이터를 삭제하는 표준 방법입니다.

DELETE   vt 
FROM   VA_demo_setup_NCSC_temp vt 
    INNER JOIN VA_demo_setup_enrolled va ON vt.student_id = va.student_id AND vt.academic_period = va.academic_period; 

아마도 당신은 고유 식별자로 구성 VA_demo_setup_NCSC_temp 테이블에 기본 키가? (이 경우 다시 작성된 쿼리로 인해 성능이 변경되지는 않습니다.)

+1

아마도 모든 RDBMS가이 방법으로 쿼리 작성을 지원하는 것은 아닙니다. –

+0

@ Clockwork-Muse 예, 자세한 정보를 기다리는 동안 SQL Server를 사용하고 있습니다. 관심없는 -이 구문을 허용하지 않는 데이터베이스 관리 시스템은 무엇입니까? – Drammy

+0

삭제 * \t from VA_demo_setup_NCSC_temp e \t 여기서 mergedId (선택 병합 된 ID는 VA_demo_setup_enrolled)입니다. – David

관련 문제