집 >데이터 베이스 >MySQL 튜토리얼 >특정 지점에서 5마일 이내에 있는 모든 건물을 효율적으로 찾으려면 어떻게 해야 합니까?
공간 쿼리 최적화: 5마일 내의 모든 건물을 효율적으로 찾습니다
이 기사에서는 일반적인 공간 문제인 주어진 좌표점에서 지정된 반경 내의 모든 건물을 검색하는 문제를 살펴봅니다. ST_CONTAINS
기능을 직접 사용하는 것은 효율적이지 않을 수 있으므로 이 기사에서는 더 나은 솔루션을 모색할 것입니다.
데이터 표현의 중요성
기술적인 세부 사항을 설명하기 전에 올바른 데이터 표현의 중요성을 강조하는 것이 중요합니다. 지리공간 데이터를 별도의 경도 및 위도 열로 저장하면 쿼리 작업이 비효율적으로 이루어집니다. 이를 위해 단일 필드에 두 개의 좌표를 캡슐화하는 geometry
또는 geography
데이터 유형을 사용하는 것이 좋습니다.
ST_DWithin을 사용하여 근접 쿼리를 효율적으로 수행하세요
ST_DWithin
은 두 도형이 지정된 거리 내에 있는지 직접 확인하는 강력한 기능입니다. 검색 반경을 미터 단위로 환산하고 ST_DWithin
을 이용해 계산한 거리와 비교하면 원하는 범위 내의 건물을 효율적으로 식별할 수 있습니다.
<code class="language-sql">SELECT name, long, lat FROM building WHERE ST_DWithin( ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'), ST_POINT(long, lat), 8046.72 ); -- 8046.72 米 = 5 英里</code>
ST_Distance를 사용하여 변환된 마일 거리를 처리합니다
또는 ST_Distance
을 사용하여 기하학적 도형 사이의 거리를 계산할 수도 있습니다. 출력은 처음에는 미터 단위이지만 간단한 곱셈 인수를 사용하여 마일로 변환할 수 있습니다.
<code class="language-sql">SELECT name, long, lat, ST_Distance( ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'), ST_POINT(long, lat) ) * 0.000621371 AS distance FROM building WHERE distance < 5;</code>
참고: ST_Distance
을 사용할 때는 인덱스를 사용하여 공간 쿼리를 효율적으로 처리해야 합니다. ST_Distance
자체는 인덱싱을 지원하지 않지만 ST_GEOMETRY
에 공간 인덱스를 생성하면 전체 쿼리 성능을 최적화할 수 있습니다.
요약
대체 접근 방식을 탐색하고 데이터 표현 최적화를 강조함으로써 지정된 범위 내의 건물을 효율적으로 검색하는 방법을 보여줍니다. 본 문서에 제시된 기술은 실제 애플리케이션에서 공간 쿼리에 대한 확장성과 성능 향상을 제공합니다.
위 내용은 특정 지점에서 5마일 이내에 있는 모든 건물을 효율적으로 찾으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!