현재 위치: > 최신 기사 목록> PHP 및 MySQL의 지리적 위치 및 페이지 매김 쿼리 효율을 최적화하기위한 실용 인덱싱 기술

PHP 및 MySQL의 지리적 위치 및 페이지 매김 쿼리 효율을 최적화하기위한 실용 인덱싱 기술

M66 2025-07-09

지리적 위치 쿼리 최적화 방법

웹 개발에서 사용자 위치를 기반으로 컨텐츠 또는 서비스를 권장하는 것이 일반적인 요구 사항이되었습니다. 이러한 지리적 위치 쿼리를 처리 할 때는 많은 위도 및 경도 데이터를 검색합니다. 쿼리 속도를 향상시키기 위해 MySQL의 공간 인덱싱 및 합리적인 SQL 전략을 사용할 수 있습니다.

위도와 경도가 포함 된 데이터 테이블을 구축하십시오

위치 정보를 저장하는 데 사용되는 위치 라는 테이블이 있으며 필드에는 ID , 이름 , 위도경도가 포함됩니다. 쿼리 효율을 향상시키기 위해서는 위도 및 경도 필드에 대한 공간 색인을 만들어야합니다.

ALTER TABLE 위치는 공간 색인 index_name (위도, 경도)을 추가합니다.

Haversine 공식을 사용한 위치 필터링

PHP에서 SQL 문은 Haversine 공식과 결합하여 대상 지점까지의 거리를 계산하여 인근 위치의 쿼리 기능을 실현할 수 있습니다.

$ latitude = 37.7749; // 쿼리 포인트의 위도 $ longitude = -122.4194; // 쿼리 포인트의 경도 $ 거리 = 10; // 쿼리 포인트의 반경 (킬로미터)

$ query = "선택 ID, 이름, 위도, 경도 선택,
         (6371 * ACS (cos (Radians ($ latitude)) * cos (Radians (Latitude)) *
         COS (라디안 (경도) - 라디안 ($ longitude)) +
         sin (radians ($ latitude)) * sin (Radians (Latitude))))
         위치에서
         거리 <= $ 거리가 있습니다
         거리별로 주문하십시오 ";

$ result = mysqli_query ($ connection, $ query);

이 방법은 인덱싱 및 거리 필터링을 결합하여 불필요한 트래버스 작업을 크게 줄이며 위치 권장 사항 또는 MAP 유형 서비스에 특히 적합합니다.

페이지 매김 쿼리 최적화 기술

대형 데이터 목록을 표시 할 때 Pagination 쿼리는 매우 일반적이지만 데이터 볼륨이 클 때 전통적인 페이징은 성능 병목 현상이 발생하기 쉽습니다. 한계 조항과 결합 된 인덱스 필드를 사용함으로써 지정된 범위 내의 데이터를 효율적으로 추출 할 수 있습니다.

페이징 필드 인덱싱

페이징이 필드 (예 : 기본 키 ID)를 기반으로하는 경우 필드를 색인해야합니다.

책 (ID)에서 색인 index_name을 만듭니다.

PHP Pagination 쿼리 코드 예제

다음은 일반적으로 사용되는 페이지 매김 쿼리 구현 방법입니다.

$ page = 1; // 현재 페이지 번호 $ perpage = 10; // 페이지 당 레코드 수 $ $ 오프셋 = ($ page -1) * $ perpage;

$ query = "select * from books
         ID로 주문하십시오
         $ $ 오프셋 제한, $ perpage ";

$ result = mysqli_query ($ connection, $ query);

복잡한 하위 쿼리 또는 더 큰 오프셋 시나리오와 비교할 때, 인덱스 필드와 결합 된 제한 페이징은 특히 데이터 볼륨이 백만 레벨 수준에 도달 할 때 데이터베이스 부담을 크게 줄일 수 있습니다.

요약

위치 기반 데이터 서비스 또는 기존 데이터 페이징 목록이든 효율적인 인덱싱 전략은 항상 데이터베이스 최적화의 핵심입니다. MySQL에서 공간 인덱스와 Haversine 공식을 사용하면 지리적 위치 필터링을 신속하게 실현할 수 있습니다. 페이징 시나리오에서는 필드 인덱스와 한계 문을 결합하면 데이터 검색 효율성을 향상시킬 수 있습니다. 개발자는 비즈니스 시나리오에 따라 이러한 기술을 유연하게 사용하여 애플리케이션 성능에 대한 확실한 지원을 제공해야합니다.