비교적 복잡한 설정이 있습니다. IBM DB2 서버 인 3 개의 연결된 서버와 함께 SQL Server 2012를 사용하고 있습니다. 세 가지 연결된 서버의 테이블을 조인하여 데이터를 가져 오는 여러 쿼리가 있습니다. 사용하고있는 버전의 특성 때문에 일부 OLAP 함수를 직접 사용할 수 없습니다. 업그레이드가 옵션이 아니기 때문에 해결 방법은 뷰를 만들고 뷰에서 해당 함수를 실행하는 것이 었습니다. 현재 직면 한 한 가지 문제는 뷰에서 ORDER BY
을 사용하면 뷰가 실행되는 데 필요한 시간이 거의 세 배가된다는 것입니다.VIEW를 실행하면 ORDER BY가 너무 많은 시간이 걸립니다.
SELECT
으로 만 실행하면 24 초가 걸릴 수 있습니다. (예, 여기서 우스운 이야기를하는 것을 알지만 여전히 쿼리를 수정할 수 없기 때문에 문제를 해결할 수 있습니다. DB2 서버에서는 order by
이 내 편이 다.) ORDER BY
을 사용할 때 어떤 열을 주문했는지에 따라 68 초에서 80 초가된다. 지금은 OpenQuery
으로 허용 되었기 때문에 나는 schemabound보기를 만들 수 없습니다. 어쨌든보기를 만들 때 ORDER BY
을 사용할 수 없다는 것을 읽었습니다. 시도하지는 않았지만 여러 번 사용할 수 있도록 주문해야합니다. 열은보기 좋지 않은데,보기에는별로 좋지 않지만 ... 몰라요.
일반적으로 SQL
에 대한 간단한 지식이 있기 때문에 최선의 선택이 무엇인지 잘 모르겠습니다. 실행 시간이 고정 된 경우에도 전체 쿼리에 필요한 시간과 비교할 때 내 Order by
절이 너무 많은 시간을 소비하는 것을 원하지 않습니다. 쿼리를 직접 실행하면 최대한 빠르게 만들 수 있습니다. 뷰를 사용하지 않고 ORDER BY
을 초기 query
에 추가하면 원래 시간은 24 초가되고 36까지 증가합니다. 같은 ORDER BY
함수가 뷰에서 실행될 때의 퍼센티지는 여전히 성능보다 훨씬 낫습니다.
제 질문은 - 무엇 때문에 ORDER BY
이 너무 느리게 실행되고 원래 쿼리의 일부였던 것처럼 빠르게 만들 수 있습니까? 걸리는 엄청난 시간을 줄일 수 있습니까?
, 당신 때문에에 의해 주문과 뷰를 정의해서는 안됩니다 (반드시) 명령 받다. 전화를 할 때 명시 적으로 주문해야합니다. 명시 적으로 순서화 할 때 속도가 느리면 순서에 따라 사용중인 소스 컬럼에 인덱스가 있는지 확인하십시오. – Oliver