나는 이전의 question에서 SQL에 대한 좋은 답에 영감을 받았습니다. 이 SQL은 Interbase 2009를 사용하는 DB에서 실행됩니다. 크기는 약 21GB입니다.Interbase로 SQL 최적화
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
은 AddrDistance와 840,000 행 190000 주소와 행과 DistanceQueryTask 4 있습니다.
질문은 더 빠를 수 있습니까? 같은 쿼리가 여러 번 실행됩니다. select bold_id from DistanceQueryTask.
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는 의미 행의 경우 낮은 숫자를 가지고 : 나는, 그냥 일반 SQL : 여기
EDIT1
현재 실행 계획입니다 저장 프로 시저에 관심이 아니에요합니다 데이터베이스에.
쿼리 실행 계획을 확인 했습니까? (IBX 구성 요소, IBExpert 및 IBConsole을 사용하여 수행 할 수 있습니다)? 인덱스 대신 자연 조인이 있는지를 보여줍니다. – mjn
DistanceQueryTask에는 항상 적은 수의 레코드가 포함됩니까? – skamradt