문제

에서 영감을 얻었에서 좋은 답변 내 이전 질문 에 대한 SQL.지금 이 SQL 실행에 DB 으로 인터베이스 2009.그것은 21GB 크기에 있습니다.

SELECT DistanceAsMeters, AddrDistance.Bold_Id, AddrDistance.Created, AddressFrom.CityName_CO as FromCity, AddressTo.CityName_CO as ToCity
FROM AddrDistance
LEFT JOIN Address AddressFrom ON AddrDistance.FromAddress = AddressFrom.Bold_Id
LEFT JOIN Address AddressTo ON AddrDistance.ToAddress = AddressTo.Bold_Id
Where  DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0
       and not AddrDistance.bold_id in (select bold_id from DistanceQueryTask)
Order By Created Desc

가 있 840000 행 AddrDistance 190000 행 주소와 4DistanceQueryTask.

이 질문은,할 수 있습니까?내 생각,동일한 쿼리가 실행되는 많은 시간 선택 bold_id 에서 DistanceQueryTask.참고하는 내 관심이 아니에 저장되는 절차,그냥 평범한 SQL:)

EDIT1 여기에는 현재 실행 계획:

Statement: SELECT DistanceAsMeters, AddrDistance.Bold_Id, AddrDistance.Created, AddressFrom.CityName_CO as FromCity, AddressTo.CityName_CO as ToCity
FROM AddrDistance
LEFT JOIN Address AddressFrom ON AddrDistance.FromAddress = AddressFrom.Bold_Id
LEFT JOIN Address AddressTo ON AddrDistance.ToAddress = AddressTo.Bold_Id
Where  DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0
       and not AddrDistance.bold_id in (select bold_id from DistanceQueryTask)
Order By Created Desc

PLAN (DISTANCEQUERYTASK INDEX (RDB$PRIMARY218))
PLAN SORT (JOIN (JOIN (ADDRDISTANCE NATURAL,ADDRESSFROM INDEX (RDB$PRIMARY234)),ADDRESSTO INDEX (RDB$PRIMARY234)))

그리고 예,DistanceQueryTask 의미가 낮은 수은 경우 행은 데이터베이스에서.

도움이 되었습니까?

해결책

사용 왼쪽에 가입하고 하위가 느려지는 모든 쿼리가 있습니다.

당신이 얻을 수 있는 몇 가지 개선이 올바른 인덱스(에 Bold_id,DistanceMeters,PseudoDistanceAsCostKm)기억하는 인덱스의 크기를 늘리는 데이터베이스

다른 팁

나는 가정 bold_id 당신의 열쇠이며,따라서 제대로 인덱싱됩니다.
대체 한 다음 하위 select 과에 의해 가 도움이 될 수도 있을 수 있습니다 최적화 프로그램입니다.

SELECT DistanceAsMeters, Bold_Id, Created, AddressFrom.CityName_CO as FromCity, AddressTo.CityName_CO as ToCity
FROM AddrDistance
LEFT JOIN Address AddressFrom ON AddrDistance.FromAddress = AddressFrom.Bold_Id
LEFT JOIN Address AddressTo ON AddrDistance.ToAddress = AddressTo.Bold_Id
LEFT JOIN DistanceQueryTask ON AddrDistance.bold_id = DistanceQueryTask.bold_id
Where  DistanceAsMeters = 0 and PseudoDistanceAsCostKm = 0
  and DistanceQueryTask.bold_id is null
Order By Created Desc

는 인덱스를 만들어 이 부분에 대한:(DistanceAsMeters=0PseudoDistanceAsCostKm=0) 기 때문에 그것은(나)표 검사한다:ADDRDISTANCE 천연

을 사용하려고의 가입신의 선택에 의해 명시된 바와 같이 사랑한 가장 힘든 일이 될 겁니다.

다니엘과 Andre 저것은 스패밍 행동을 건의한다.는 인덱스에 많은 도움이됩니다.
는 것이 좋 이수(DistanceMeters,PseudoDistanceAsCostKm,Bold_id)기 때문에,제 2 부속의 인덱스가 일정한 다음,그 smal 인덱스의 일부분이 필요한 읽을 수 있습니다.

면 그것은 사실 FromAddress 및/또는 ToAddress 존재하는 변경할 수 있습니다 왼쪽에 가입하여 내부에 가입하기 때문에,그것은 종종 빠르(질의 최적화할 수 있는 일정).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top