2012-07-20 3 views
0

다음 SQL 쿼리가 있으며 완료하는 데 오랜 시간이 걸립니다. 동일한 결과를 얻기 위해 다른 쿼리를 사용할 수 있는지 확인하고 싶었지만 성능에 도움이 될 수도 있습니다.- MS SQL의 성능 최적화 caluse가 아닌 쿼리 삭제

Delete from table1 WHERE fk_id = '1234' AND pk_id NOT IN ('aaaa', 'bbbb', 'cccc'); 

참고 pk_idPK 열이고 fk_idtable1하는 FK이다.

+3

얼마나 많은 행을 삭제해야합니까? 그리고 제발, 좀 더 많은 사람들이 당신을 도울 싶을 어떤 대답을 수락하십시오 –

+3

자세한 내용을 제공해주십시오. 테이블이 얼마나 큽니까? 제약이 있습니까? 방아쇠? 계단식 삭제? –

+1

질문 할 때 사람들은 시스템과 테이블에 대해 모릅니다. 게시하는 동안 쿼리의 테이블에 대한 가능한 메타 데이터 정보를 게시하려고합니다. 테이블의 크기, 테이블의 ddl, 모든 인덱스 등. 이것은 다른 사람들이 당신을 훨씬 빨리 도와 줄 것입니다. –

답변

0

쿼리에 대한 제안 사항이 없습니다. 매우 기본입니다.

하지만 인덱스를 추가하려고 할 수 있습니다 :

ALTER TABLE table1 ADD INDEX (fk_id); 
+0

또한 @Gordon Linoff가 질문에 댓글을 달았으므로 삭제 쿼리는 트리거, 제약 조건 및 계단식 삭제의 영향을받습니다. 그것들은 그렇게 느리게 만들 수 있습니다. – Scen

0

귀하가 제공 한 데이터로는 사용 'AND'조건대로 쿼리 아무 문제 없을 것 같습니다. 이제는 쿼리를 너무 오랜 시간 동안 사용하는 이유에 대해 데이터베이스를 고려하고 분석해야합니다. 그래서 당신은 다음과 같은 것들로 체크 아웃하고 싶을 것입니다.

1) SELECT COUNT (1) 표
에서
곳 fk_id = '1234'AND pk_id NOT IN ('AAAA', 'BBBB', 'CCCC')
이 당신에게 행의 수를 줄 것이다 삭제됩니다.

2)
T.name을 선택
같은 것을 사용해 TABLENAME , O.name TriggerName을 sysobjects O
INNER JOIN sys.tables FROM
T = ON이 T.object_id O.parent_obj
O AS .type = 'TR'AND T.name = 'table1'

이것은 테이블과 관련된 트리거를 알려줍니다.

3) 인덱스의 테이블 속성, 거기에있는 제약 조건에 대해 자세히 조사해야합니다.