2009-11-05 4 views
2

실행중인 select 문에 성능 문제가 있습니다.명세서 성능 선택

여기입니다

SELECT  Material.* 
FROM  Material 
INNER JOIN LineInfo ON Material.LineInfoCtr = LineInfo.ctr 
INNER JOIN Order_Header ON LineInfo.Order_HeaderCtr = Order_Header.ctr 
WHERE (Order_Header.jobNum = 'ttest') 
    AND (Order_Header.revision_number = 0) 
    AND (LineInfo.lineNum = 46) 

명령문 서버 부하에 따라 실행 5-10 초가 걸립니다.

일부 테이블 통계 :

- Material has 2,030,xxx records. 
- Lineinfo has 190,xxx records 
- Order_Header has 2,5xx records. 

내 문은 데이터의 약 20 ~ 25 필드를 포함하는 18 행의 총을 반환합니다. 단일 필드 또는 모든 필드를 반환해도 아무런 효과가 없습니다. 이 성능은 일반적인 것인가? 그것을 향상시키기 위해 할 수있는 일이 있습니까?

외래 키를 검색하기 위해 하위 선택을 사용하려고했는데 IN 절과 왼쪽 외 결합을 사용하여 친구가 그를 도왔다는 하나의 게시물을 발견했습니다. 나에게는 모두 실행 시간이 5 ~ 10 초가 걸린다.

이것은 MS SQL 관리 스튜디오를 통해 액세스 한 MS SQL 서버 2005입니다. 시간은 쿼리 분석기에서 경과 된 시간입니다.

아이디어가 있으십니까?

+0

색인이란 무엇입니까? 쿼리 계획을 표시하고 분석하는 방법을 알고 있습니까? – gerleim

답변

2

SQL Server가 사용하는 인덱스 (있는 경우)를 보려면 먼저 analyze the query plan이어야합니다.

조인 및 쿼리 제한 (WHERE 절)에 LineinfoOrder_Header의 열만 사용하기 때문에이 쿼리에서는 일부 covering indexes의 혜택을 볼 수 있습니다.

1

귀하의 검색어에 특별한 것이 보이지 않으므로 색인이 정확하다면 훨씬 더 빨리 수행해야합니다. 행 수가 너무 높지는 않습니다.

쿼리와 관련된 테이블에 인덱스가 있고 쿼리 분석기의 "디스플레이 실행 계획"옵션을 사용하려고 했습니까? 기본적으로 쿼리를 실행하고 실행 계획을 반복하고 인덱스를 추가하여 전체 테이블 스캔 작업을 볼 필요가 없습니다.

SQL Management Studio에서 실행하는 경우 색인을 추가하는 쿼리를 자동으로 조정할 수있는 옵션이 있지만 자신이 수행하는 작업을 더 잘 이해할 수 있도록 최적화를 시도하는 것이 좋습니다.

감사 마시모는

1

은 성능에 영향을주지 않습니다,하지만 같은 "X SELECT * FROM"와 같은 쿼리를 작성하지 않습니다. 스타 표기법을 숨기고 개별 기둥을 철자하십시오. 스키마를 열을 추가하여 스키마를 변경하더라도이 메서드를 호출하는 코드는 여전히 작동합니다.

다른 사람들이 이미 말한 것처럼 색인이 여기에 핵심입니다.

WHERE 절의 순서는 도움이 될 수 있습니다. 고려에서 가장 많은 수의 행을 먼저 제거하는 것을 실행하십시오.

1

모든 제안을 받아서 함께 사용하면 몇 가지 인덱스를 설정할 수 있었으므로 실행하는 데 1 초도 채 걸리지 않았습니다. 솔직히 말해서, 거의 즉각적입니다.

내 문제는 테이블 속성을 클릭하면 기본 키가 색인 된 것을 보았고 모든 사람들이 말한 것이 실수라고 생각했습니다. 나는 실행 계획을보고 조정 조수를 실행하고 두 가지를 합쳐서 외래 키의 색인을 생성 할 수 있음을 깨달았습니다. 그것은 이제 끝났으며 모든 것들이 아주 탁월합니다.

도움을 주셔서 감사 드리며, 새답스 질문에 사과드립니다.