웹 개발에서 사용자 위치를 기반으로 컨텐츠 또는 서비스를 권장하는 것이 일반적인 요구 사항이되었습니다. 이러한 지리적 위치 쿼리를 처리 할 때는 많은 위도 및 경도 데이터를 검색합니다. 쿼리 속도를 향상시키기 위해 MySQL의 공간 인덱싱 및 합리적인 SQL 전략을 사용할 수 있습니다.
위치 정보를 저장하는 데 사용되는 위치 라는 테이블이 있으며 필드에는 ID , 이름 , 위도 및 경도가 포함됩니다. 쿼리 효율을 향상시키기 위해서는 위도 및 경도 필드에 대한 공간 색인을 만들어야합니다.
ALTER TABLE 위치는 공간 색인 index_name (위도, 경도)을 추가합니다.
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을 만듭니다.
다음은 일반적으로 사용되는 페이지 매김 쿼리 구현 방법입니다.
$ page = 1; // 현재 페이지 번호 $ perpage = 10; // 페이지 당 레코드 수 $ $ 오프셋 = ($ page -1) * $ perpage; $ query = "select * from books ID로 주문하십시오 $ $ 오프셋 제한, $ perpage "; $ result = mysqli_query ($ connection, $ query);
복잡한 하위 쿼리 또는 더 큰 오프셋 시나리오와 비교할 때, 인덱스 필드와 결합 된 제한 페이징은 특히 데이터 볼륨이 백만 레벨 수준에 도달 할 때 데이터베이스 부담을 크게 줄일 수 있습니다.
위치 기반 데이터 서비스 또는 기존 데이터 페이징 목록이든 효율적인 인덱싱 전략은 항상 데이터베이스 최적화의 핵심입니다. MySQL에서 공간 인덱스와 Haversine 공식을 사용하면 지리적 위치 필터링을 신속하게 실현할 수 있습니다. 페이징 시나리오에서는 필드 인덱스와 한계 문을 결합하면 데이터 검색 효율성을 향상시킬 수 있습니다. 개발자는 비즈니스 시나리오에 따라 이러한 기술을 유연하게 사용하여 애플리케이션 성능에 대한 확실한 지원을 제공해야합니다.