2011-02-25 5 views
0

SQL Server 2005에서 느린 쿼리가 있습니다. 수십만 개의 행과 백만 개의 행이있는 테이블에 3 개의 내부 조인이 있고 절.조인 및 순서 SQL Server 2005 느린 쿼리

모든 조인 키는 uuid 열이지만 테이블 중 하나에 인덱스 만 있습니다 (각 테이블에는 uniqueidentifier 형식의 기본 키가 있고 다른 테이블에는이 키를 가진 외래 키 역할을하는 열이 있습니다) 가입 할 때와 같은 값이지만 색인이 없습니다).

foreign-key-acting 키 열에 인덱스를 추가하면이 값이 상당히 높아집니다.

이 쿼리를 최대한 활용하기위한 다른 옵션에는 어떤 것이 있습니까?

참고 : 내 DB에는 CPU 병목 현상이있는 것 같습니다. 자주 실행되는이 쿼리가 원인 일 수 있다고 생각하는 것이 합리적입니까? db는 약 2GB이고 4GB RAM을 가지고 있으므로 많은 I/O 문제가 의심 스럽습니다. 주문은 CPU를 먹어서됩니까?

+2

구조에 대한 설명보다는 정확한 테이블 정의와 모든 색인을 게시하는 것이 좋습니다. –

답변

2

가입 키를 색인화해야합니다. 여러 필드에 참여하는 경우 해당 필드를 모두 포함하는 커버 인덱스를 쿼리에있는 순서대로 추가하십시오. 아마 성능 문제의 90 %를 처리 할 것입니다.

서버가 모든 조인에 대해 테이블 ​​스캔을 수행해야하므로 이와 같은 쿼리에 CPU 병목 현상이 발생할 수 있습니다.

+0

이상한 점은 인덱스가 누락 되어도 쿼리 계획을 검토하면 클러스터 된 인덱스 조회 또는 클러스터되지 않은 인덱스 조회 만 수행된다는 것입니다. 어떻게 될 수 있니? –

+0

실제 또는 예상 실행 계획을보고 있습니까? Remus가 요청한 테이블 구조와 인덱스에 대한 정보를 제공해 줄 수 있습니까? 불완전한 정보를 바탕으로 진단하기가 어렵습니다. – JNK

+0

실제 테이블 데이터를 게시 할 수는 없지만 필자가 설명한 내용은 본질적으로 완전합니다 (순서에 따라 사용되는 테이블의 일부 열 제외). 각 테이블에 uuid pk가 아닌 다른 키가 없습니다 (외래 키가 없음). 그러나 귀하의 질문에 대한 대답은 예상되는 실행 계획입니다. –

0

조인이 내부 조인이면 인덱싱 된 뷰를 만들 수 있습니다. 이렇게하면 조인이없고 정렬이없는 것처럼 런타임 성능을 얻을 수 있습니다. 디스크 공간을 희생 시키더라도 그 이상으로 빠르지는 않습니다. 조인이 외부 조인 인 경우 해결 방법이 있습니다. "null"종류의 값으로 사용되는 더미 행을 삽입하고 내부 조인으로 전환합니다.

JNK가 지적했듯이 외래 키 열을 인덱싱하는 것이 여전히 중요합니다. 가능하면 색인 생성하지 않고 도망 갈 수는 없습니다.

+0

누군가 이것이 왜 downvoted 이유를 설명 할 수 있습니까? –

+0

@Joda - 잘못 되었기 때문에 추측합니다. – JNK

+0

그럼 왜 말해줘! – usr