2017-11-02 5 views
0

정상이 삭제 :가 삭제 SQL 쿼리 '인덱스'

DELETE 
FROM Table 
WHERE column1 = 'some value' 

인덱스 삭제 :

난 당신이 테이블에서 행을 삭제할 때 모든 참조 테이블을 검색 할 것이라는 점을 알고있다
DELETE Table1 
FROM Table1 WITH(INDEX(PK_Table1)) 
WHERE column1 = 'some value' 

, 삭제 실행이 느려집니다.

WITH INDEX를 사용하여 삭제하는 방법은 무엇입니까?

+0

당신은 어떤 sgbd에 측정 할 수 있습니다 당신은 또한 최적화 프로그램이 선택하는 계획을 볼 수 있습니다. 이것은 간단한 인덱스를 찾기 위해 옵티 마이저가 여러분의 도움을 필요로하지 않는다는 것을 알 수 있습니다. 코드를 혼란스럽게하지 말고, 힌트를줍니다. –

+0

그것은 자주 발생하지 않습니다. SQL Server가 최상의 실행 계획을 선택하지는 않습니다. 일반적으로 인덱스 힌트가 필요한 경우입니다. 실행 계획을 비교하고 테스트를 실행해야합니다. 요약 [귀하의 말 경주] (https://ericlippert.com/2012/12/17/performance-rant/) – GarethD

+1

사용중인 dbms에 태그를 지정하십시오. 이 코드는 제품마다 다릅니다. – jarlh

답변

1

WITH(INDEX(PK_Table1))은 색인 힌트입니다. 즉, 최적의 인덱스를 결정하기보다는 특정 인덱스를 사용하도록 SQL에 지시합니다. 일반적으로 인덱스 힌트는 필요하지 않습니다. SQL은 무엇이 최선인지를 잘 알고 있습니다. 마지막으로 유사한 쿼리를 사용했을 때 어떤 인덱스를 사용했는지 기억하기 때문에 최상의 인덱스를 작성하는 데 많은 시간을 소비하지 않습니다.

SQL이 잘못 처리되는 경우가 있습니다. 당신은 힌트를 추가하여 성능을 향상시킬 수 있습니다. 이 경우는 매우 드뭅니다. 이러한 경우 테이블을 가능한 한 실제 세계에 가까운 상태로 철저히 테스트하십시오 (각 색인에서 쿼리가 얼마나 잘 수행되는지에 영향을 미침)

실제 성능 문제가 보이지 않는다면 & 수 있습니다 힌트를 사용하지 마십시오 힌트가 도움이 증명

을 여기에 잘 인수를 요약 힌트에 관련 게시물, 다음과 같습니다. https://www.brentozar.com/archive/2013/10/index-hints-helpful-or-harmful/