SQL 쿼리를 실행하여 특정 위치가 다각형으로 정의 된 관할 구역에 속하는지 확인해야하는 응용 프로그램을 작성 중입니다. 이러한 관할 구역은 분기별로 업데이트되므로, 내가 확인하고있는 날짜와 비교하여 확인해야합니다. 나는이라는 mySQL 함수를 사용하여 내가보고있는 관할권의 범위를 좁히고, 내 응용 프로그램이 주어진 지점이 어느 지점에 있는지 쉽게 확인하도록합니다.평가 순서를 변경하여 SQL 쿼리의 실행 시간 단축
SELECT DISTINCT t0.id FROM jurisdiction t0
WHERE t0.beginDate <= '2017-08-05' AND t0.endDate >= '2017-08-05'
AND MBRContains(t0.geometry,GeomFromText("POINT(48.0 -120.0)"));
내가 MBRContains 날짜를 확인보다 더 비용이 많이 드는 작업임을 매우 확신 해요,하지만 난 많은 SQL로 근무 한 적이없는 내가하는 방법을 확실 해요 : 바로 지금, 내 쿼리는 다음과 같이 관할권이 먼저 날짜별로 필터링되고 MBRContains에 대해 확인됩니다. 어떻게해야합니까? 이 쿼리로 동일한 결과를 얻는 동안 수행 할 수있는 다른 최적화가 있습니까?
오타 인 지 확실하지 않지만 잘못된 날짜입니다. 하나의 날짜 필드는'DATE' 데이터 타입이어야합니다; 다른 경우에는 문자열 값을 사용하는 경우에도 해당 비교가 실제로 의미가있는 방식으로 문자열을 형식화해야합니다 ('06 -08-2001 '의 종료 날짜는 '05 -08-2017'다음으로 끝남). 마찬가지로 '04 -08-2020 '의 시작 날짜는 '05 -08-2017'이전입니다.) – Uueerdo
@Uueerdo 날짜와 요요는 예제입니다. 나는 그것이 올바른 날짜에 전달되고 결과를 올바르게 필터링하고 있음을 확인했습니다. 쿼리가 너무 오래 걸리는 것입니다. – user3726962
beginDate, endDate 및 geometry에 인덱스를 사용하면 액세스 속도가 빨라집니다. – hackela