두 개의 유효한 영국 우편 번호 사이에 Google/Bing으로부터 거리를 기록하는 테이블이 있습니다. 시스템이 사용됨에 따라이 테이블이 추가되어 다음 거리 쿼리가 빨라지고 웹 서비스를 호출하여 온라인으로 거리를 검색 할 필요가 없습니다.튜플에서 결과를 얻기위한 빠른 쿼리
ALTER FUNCTION [dbo].[GetDistanceFromCache]
(@PostcodeA VARCHAR (MAX), @PostcodeB VARCHAR (MAX))
RETURNS DECIMAL
AS
BEGIN
DECLARE @FoundDistance AS DECIMAL;
SELECT @FoundDistance = DistanceMiles
FROM AddressInfoRecordedDistance
WHERE (PostcodeA = @PostcodeA
AND PostcodeB = @PostcodeB)
OR (PostcodeB = @PostcodeA
AND PostcodeA = @PostcodeB);
RETURN ISNULL(@FoundDistance, -1);
END
내가 알 필요가 다음과 같이
OID PostcodeA PostcodeB DistanceMeters DistanceMiles
-------------------- --------- --------- --------------------------------------- ---------------------------------------
1 BR60PS BT248DN 788847 490
2 BR60PS CM201JA 64426 40
3 BR60PS CM82AP 77640 48
4 BR60PS CO123AX 131617 82
5 BR60PS CT146EL 119366 74
6 BR60PS DA110TA 29247 18
7 BR60PS DE216AH 262570 163
8 BR60PS DL81AB 397524 247
9 BR60PS HG27JE 368802 229
10 BR60PS IP121AL 144394 90
11 BR60PS IP141AH 144183 90
12 BR60PS IP209AH 172259 107
지금 내가 Linq에 - 투 - SQL을 사용 스칼라 UDF를 가지고가 정의 : 여기
는 테이블 구조 어떤 빠른 SQL 문 또는 C# linq 결과를 얻을 수 있다면? 800 명의 직원을 불러와 50 개의 작업에 대해 실행하면 시스템이 일시 중지되고DBContext.GetDistanceFromCache()
을 선택 세트에 추가하지 않으면 소요 시간이 상당히 줄어 듭니다.
var query =
from locum in DbContext.Locums
where
locum.IsActive == true &&
locum.IsAdminMarkedComplete == true &&
locum.IsLocumsExciteBan == false &&
locum.IsGPHCBan == false &&
filterID1.Contains(locum.OID) == false &&
filterID2.Contains(locum.OID) == false
select new {
LocumID = locum.OID,
LocumName = locum.FirstName + " " + locum.LastName,
locum.MobileNumber,
locum.Email,
Gender = locum.Gender ? "Male" : "Female",
locum.DateofBirth,
LocumType = locum.LocumType.Name,
**Distance** = DbContext.GetDistanceFromCache(_Postcode, locum.AddressInfo.Postcode),
Address = String.Format("{0} {1} {2} {3}",
locum.AddressInfo.House.Length == 0 ? String.Empty : locum.AddressInfo.House + ", ",
locum.AddressInfo.Street.Length == 0 ? String.Empty : locum.AddressInfo.Street + ", ",
locum.AddressInfo.Area.Length == 0 ? String.Empty : locum.AddressInfo.Area + ", ",
locum.AddressInfo.Postcode ?? String.Empty),
Postcode = locum.AddressInfo.Postcode,
City = locum.AddressInfo.City.Name,
County = locum.AddressInfo.City.County.Name,
locum.SystemUserID
};
색인 만들기는 가치있는 제안입니다. 내가 여기서 속도를 낼 수 있는지 보자. – DoomerDGR8
나는 속력을 얻었다. 또한 PostcoseA와 PostcodeB 열 모두에 고유 한 제한 조건을 추가하여 데이터가 일관성이 있는지 확인했습니다. – DoomerDGR8