2009-09-11 5 views
0

SQL 쿼리에 많은 조인이 포함되어 있으면 성능 문제가 있습니까? 조인의 성능을 높일 수있는 가장 좋은 방법 중SQL 쿼리에 많은 조인이 포함되어 있으면 성능 문제가 있습니까?

+3

프로그램에 많은 행이 포함되어 있으면 성능 문제가 있습니까? ... 귀하의 질문은 매우 광범위하고 동등하게 모호합니다. 명확히하십시오. 조인은 다른 처리와 마찬가지로 시간이 걸릴 것입니다. 그러나 그것은 항상 상충 관계의 문제입니다. – derobert

+0

조인은 성능 대 성능에 가장 적은 영향을 미친다는 점에 유의하십시오. –

답변

4

이있을 수있는 -하지만 쿼리 성능은 많은 요인에 의해 영향을받는 민감한 일 :

  • 번호의 결합
  • 테이블 구조
  • 데이터베이스의 크기
  • 존재 여부와 인덱스의 데이터 유형 값의
  • 데이터 유형이 결합되는
  • 등 등

당신은 세부 사항의 모든 종류에 얻을 수 있습니다. 하지만 일반적으로 최선의 방법은 작동하는 쿼리를 작성한 다음 앱에 프로필을 작성하여 실제로 문제가 있는지 확인하는 것입니다. 다음으로으로 검색어를 최적화 해보십시오.

0

예 SQL에서 많은 조인을 사용하면 성능에 영향을줍니다.

2

예.

하지만 가장 큰 문제는 다음과 같습니다. 아마 다음 장 테이블이 첫 번째 '펭귄'에 일치를 찾고 읽을 책에 결합 할 것입니다

select book.title, chapter.page_count 
from chapter 
join book on book.bookid=chapter.bookid 
where chapter.subject='penguins' 

쿼리 : 당신은 같은 쿼리 있다고 가정. Bookid가 도서의 기본 키이거나 적어도 색인이 생성 된 경우 매우 빠릅니다. 그러나 그렇지 않다면 우리는 책의 전체 파일 순차적 읽기를해야 할 것입니다. 엔진 및 기타 요인에 따라 에 대한 전체 북 테이블을 다시 읽어야 할 수도 있습니다. 각 장 레코드가 있습니다. 그것은 오랜 시간이 걸릴 수 있습니다.

세 테이블을 조인하고 두 조인 모두 전체 파일 읽기가 필요한 경우 상처를 입을 수 있습니다.

조인은 항상 무언가입니다. 그러나 전체 파일 읽기, 특히 여러 개의 전체 파일 읽기가 필요한 조인에는 많은 비용이 듭니다. 일부 데이터베이스 엔진은 발생하는 것을 인식하여이 비용을 줄이고 메모리에 테이블을로드하고 재사용 할 수 있으며 일반적으로 일종의 해시 검색을 수행합니다. 이것은 여전히 ​​비싸지 만 나쁜 것은 아닙니다.

설명 플랜을 읽는 법을 배우십시오. 이것들은 질의를 분석하고, 그들이 나쁜 곳을 알아 내고, 정리하는 데 많은 도움을 줄 수 있습니다. 개인적으로, 쿼리가 명백하게 단순하지 않다면, "어떤 것이 든 테이블에서 primary_key = 무엇이든 선택"과 같은 설명 플랜을 확인해보십시오.

+0

explantion을 주셔서 감사합니다. – StarDotStar

1

조인을 많이 사용하면 검색 성능이 저하 될 수 있습니다.하지만 적절한 색인 생성을 사용하면 페널티가 종종 사람들의 생각보다 훨씬 적습니다. 먼저 측정하십시오.

그러나 사람들은 조인을 제거하면 데이터를 '비정규 화'한다는 것을 잊어 버리는 경향이 있습니다. 그러면 데이터를 수정해야하는 비용이 발생합니다. 특히 비정규 화 된 스키마에서 완전히 정규화 된 스키마가 자동으로 적용하는 제약 조건을 적용하는 것은 어려울 수 있습니다. 어렵 기 때문에 종종 완료되지 않습니다. 그러나 제약 조건이 적용되지 않으면 데이터가 신뢰할 수 없게되며 올바른 대답을 반환하는 느린 선택 작업보다 나쁘고 혼동을 줄 수있는 빠른 선택 작업이 있습니다.

DBMS가 주로 읽혀지면 (즉, 데이터가 한 번만 작성되고 수정 된 경우는 거의없는 경우), 비정규 화의 성능 이점으로 인해 부정확 한 데이터가 데이터베이스에 들어온 위험이 허용되는지 여부를 고려할 수 있습니다. 데이터가 업무상 중요하며 자주 업데이트되는 경우 부정확 한 데이터의 위험은 일반적으로 수용하기에는 너무 심각합니다.

그러나 그들이 말하는 것처럼 YMMV.

+0

내 대답을 쓸 때 절대 생각하지 않은 각도였습니다. "조인을 피하기 위해 테이블을 비정규 화해야합니까?"라는 질문은 "극단적 인 경우에만"입니다. 비정규 화는 대개 중복 데이터가 있음을 의미하며 중복 데이터는 매우 불량합니다. 일관성을 보장하기가 매우 어렵 기 때문입니다. – Jay

+0

Jonathan은 느린 정답이 빠른 정답보다 낫다고 말합니다. 나는 그 대답을 잘못 추가 하겠지만 항상 옳고 때로는 틀린 대답보다 항상 똑같습니다. 적어도 일관되게 잘못 되었다면 잘못되었다고 판단하고 한 곳으로 이동하여 문제를 해결할 수 있습니다. 화면 A를 보았을 때 화면이 옳았을 때 화면 B를 보았을 때 화면 A를 본 사람은 문제가 있다는 것을 알지 못했을 것이고 결코 고쳐지지 않을 것입니다. 문제를 발견하여 고칠지라도 어디에서나 해결할 수 있다는 확신이 없습니다. – Jay

관련 문제