2013-05-10 5 views
1

보기 테이블이 있으며보기에서 선택하는 데 보통 너무 많은 시간이 걸립니다. 예 : select x,y,z from view1이로드하는 데 너무 많은 시간이 걸립니다. 이건 괜찮아.보기를 조회하는 데 너무 많은 시간이 걸립니다.

쿼리하는 경우 : 초 단위로 select x,y,z from view1 where x in ('abc') 쿼리.

쿼리하는 경우 : select x,y,z from view1 where x in (select 'abc' from table1 where y='1234') 초.

쿼리 : select x,y,z from view1 where x in (select x from table1 where y='1234')이 쿼리하는 데 시간이 너무 많이 걸리는 경우 문제를 해결하려고합니다.

그런 식으로 생각할 수 있습니다. select x from table1 where y='1234' 은 한 행으로 'abc'을 반환합니다.

위에서 시나리오를 설명했습니다. 세 번째 쿼리에서 많은 시간을 들여야하는 이유가 무엇이라고 생각하십니까? 가입을 시도했지만 제대로 작동하지 않았습니다.

+0

당신이 당신의 마지막 문장에서 무엇을 의미합니까 잘못된거야? 오류가 있었습니까? 결과를 얻기 위해 실패 했습니까? 기존 검색어 (또는 그 이상)만큼 오래 걸리나요? 보기의 정의를 게시 할 수 있습니까? table1이 이미 사용 되었습니까? y의 값이 '1234'인 table1에서 일반적으로 얼마나 많은 x 값을 선택할 것입니까? 사용중인 테이블에 대해 어떤 인덱스가 있습니까? 어떤 RDBMS (SQLServer, Oracle, MySQL 등)가 이것입니까? –

답변

2
  • 뷰는 뷰가 확장 매크로는
  • 시간 절약 코드의 마법 조각되지 않습니다 :보기 5 개 테이블과 4가있는 경우 더 이상, 더 적은는

그래서 조인하지 , 이들은 때마다 으로 평가 될 것입니다.

그래서, 내 질문은해야합니다 :보기에 열 X를 생성하는 몇 가지 기본 테이블의 기본 열에 적합한 인덱스가

있습니까?

마지막 SQL은 뷰 내용에 추가 IN 절과 하위 쿼리를 추가하는 것입니다. 당신은 단지 하나의 행을 알 수
참고가 반환되지만 옵티마이 수도 때문이 아니라 나 가난한 또는 날짜 통계 중, 및/또는 나쁜 색인

나의 다음 질문

표에 좋은 인덱스를 가지고 있는가 서브 쿼리를 효율적으로 만족 시키는가?

어느 쪽이든, 당신은 식별하는 데 도움이 될 것입니다 쿼리 계획을보고 무엇을 "은 작동하지 않았다"

+0

답장을 보내 주셔서 감사합니다. 가능한 모든 쿼리 방법을 시도했기 때문에 옵티저 동작과 관련이 있다고 생각합니다. –

+0

옵티 마이저는 꽤 예측 가능합니다. 그러나 뷰를 사용하고 인덱스를 가지지 않으면 옵션이 제한됩니다. – gbn

관련 문제