> 데이터 베이스 > MySQL 튜토리얼 > 특정 지점에서 5마일 이내에 있는 모든 건물을 효율적으로 찾으려면 어떻게 해야 합니까?

특정 지점에서 5마일 이내에 있는 모든 건물을 효율적으로 찾으려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-09 11:56:46
원래의
158명이 탐색했습니다.

How Can I Efficiently Find All Buildings Within 5 Miles of a Given Point?

공간 쿼리 최적화: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿