복붙노트

[SQL] 합니까 SQL은 순서는 성능에 영향을 미칠 JOIN?

SQL

합니까 SQL은 순서는 성능에 영향을 미칠 JOIN?

나는이 쿼리를 가로 질러 왔을 때 난 그냥 몇 가지 SQL을 정리했다 :

SELECT 
        jm.IMEI ,
        jm.MaxSpeedKM ,
        jm.MaxAccel ,
        jm.MaxDeccel ,
        jm.JourneyMaxLeft ,
        jm.JourneyMaxRight ,
        jm.DistanceKM ,
        jm.IdleTimeSeconds ,
        jm.WebUserJourneyId ,
        jm.lifetime_odo_metres ,
        jm.[Descriptor]
FROM    dbo.Reporting_WebUsers AS wu WITH (NOLOCK)
        INNER JOIN dbo.Reporting_JourneyMaster90 AS jm WITH (NOLOCK) ON wu.WebUsersId = jm.WebUsersId
        INNER JOIN dbo.Reporting_Journeys AS j WITH (NOLOCK) ON jm.WebUserJourneyId = j.WebUserJourneyId
WHERE   ( wu.isActive = 1 )
        AND ( j.JourneyDuration > 2 )
        AND ( j.JourneyDuration < 1000 )
        AND ( j.JourneyDistance > 0 )

내 질문은 어떤 성능 차이의 순서 내가했을 위의 쿼리로 조인을 않습니다됩니다

FROM dbo.Reporting_JourneyMaster90 AS jm

다음 하나에 다른 두 테이블에 합류

해결법

  1. ==============================

    1.아니,이 순서에 따라 최적화 동안 변경 가입하세요.

    아니,이 순서에 따라 최적화 동안 변경 가입하세요.

    단주의해야 할 점은 강제 옵션 FORCE ORDER 당신이 그들 지정한 정확한 순서대로 일이 조인입니다.

  2. ==============================

    2.의심 할 여지없이, 특히 테이블의 많은 수의 조항이 여러 테이블에 적용되는 경우와 조인가있는 쿼리, 쿼리 성능에 영향을 미치지 않습니다 SQL2008R2 서버의 질서에 가입하세요.

    의심 할 여지없이, 특히 테이블의 많은 수의 조항이 여러 테이블에 적용되는 경우와 조인가있는 쿼리, 쿼리 성능에 영향을 미치지 않습니다 SQL2008R2 서버의 질서에 가입하세요.

    조인 순서 최적화 변경되지만, 최적화 도구 does't 가능한 모든 주문에 가입하려고합니다. 그것이 최적화의 행위 자체가 귀중한 자원을 사용으로 가능한 솔루션을 고려 것을 발견하면이 멈 춥니 다.

    우리는 단지이 식을 조인의 순서를 변경하여 하위 초 성능을 내려 (1 분 + 실행 시간) 개처럼 수행 된 쿼리를 보았다. 이러한 테이블의 여러에 12 절에 조인 20과 장소에 쿼리를 것을 그러나 유의하시기 바랍니다.

    트릭은 의미가 무엇인지 질의 최적화 그림을 도울 주문을 설정하는 것입니다. 당신은 강제로 주문을 사용할 수 있지만 너무 경직 될 수 있습니다. 대부분의 조항 곳을 통해 데이터를 줄일 수 어디에 테이블로 주문을 시작 가입 있는지 확인하십시오.

  3. ==============================

    3.나는 성능에 영향을 조인 내부의 명확한 예를 가지고있다. 그것은 간단한 두 테이블 간의 조인입니다. 하나는 다른 하나는 2000을 가지고, 50 개 + 만 기록했다. 나는 작은 테이블에서 선택하여 가입하면 더 큰 그것은 5+ 분 정도 걸립니다.

    나는 성능에 영향을 조인 내부의 명확한 예를 가지고있다. 그것은 간단한 두 테이블 간의 조인입니다. 하나는 다른 하나는 2000을 가지고, 50 개 + 만 기록했다. 나는 작은 테이블에서 선택하여 가입하면 더 큰 그것은 5+ 분 정도 걸립니다.

    내가 큰 테이블에서 선택하여 가입하면 작은이 2 분 30 초 걸립니다.

    이는 SQL 서버 2012입니다.

    내가 초기 쿼리에 대한 최대 규모의 데이터 집합을 사용하고 있기 때문에 나에게이 카운터 직관적이다.

  4. ==============================

    4.중요하지 않습니다 위해 가입, 쿼리 엔진은 인덱스 및 기타 물건에 대한 통계를 기반으로 순서를 재구성합니다.

    중요하지 않습니다 위해 가입, 쿼리 엔진은 인덱스 및 기타 물건에 대한 통계를 기반으로 순서를 재구성합니다.

    테스트를 위해 다음을 수행 :

    쿼리 엔진은 다른 요인에 따라 그것들을 재구성하므로 그들은 동일해야합니다.

    다른 asnwer에 댓글로, 당신은 당신이 원하는 정확하게 순서를 사용하는 OPTION (FORCE의 ORDER)를 사용할 수도 있지만 어쩌면 가장 효율적인 하나가 될 수 없다.

    엄지 손가락의 일반적으로 순서가 차이를 만들 수있는 주문이뿐만 아니라 강제 ORDER 명령은 결과 도움말 한계에 사용 된 경우 일부 DBMS 엔진으로, 지난 상단에 적어도 기록, 가장 기록의 테이블을해야 가입 .

  5. ==============================

    5.일반적으로 없습니다. 나는이 SQL-Server에 그대로 적용 100 % 아니지만, 그것은 맞는 볼로 포스트 그레스에서 쿼리 플래너 매장 내부를 재정렬 할 수있는 권리가 합류했다. 당신이 자신의 순서를 변경 조사하기 위해 너무 비싼 넘어서는 임계 값에 도달 할 경우는 예외입니다.

    일반적으로 없습니다. 나는이 SQL-Server에 그대로 적용 100 % 아니지만, 그것은 맞는 볼로 포스트 그레스에서 쿼리 플래너 매장 내부를 재정렬 할 수있는 권리가 합류했다. 당신이 자신의 순서를 변경 조사하기 위해 너무 비싼 넘어서는 임계 값에 도달 할 경우는 예외입니다.

  6. ==============================

    6.잘못된. 당신이 FROM 절의 시작 부분에서 데이터 집합을 제한하고 있기 때문에 SQL Server 2005는 확실히 중요하다. 대신 200 만 2000 개 레코드 시작하면 더 빨리 쿼리를합니다.

    잘못된. 당신이 FROM 절의 시작 부분에서 데이터 집합을 제한하고 있기 때문에 SQL Server 2005는 확실히 중요하다. 대신 200 만 2000 개 레코드 시작하면 더 빨리 쿼리를합니다.

  7. from https://stackoverflow.com/questions/16360860/does-sql-join-order-affect-performance by cc-by-sa and MIT license