現在の位置: ホーム> 最新記事一覧> PHPとMySQLの地理的およびページネーションクエリ効率を最適化するための実用的なインデックス作成手法

PHPとMySQLの地理的およびページネーションクエリ効率を最適化するための実用的なインデックス作成手法

M66 2025-07-09

地理的位置クエリ最適化方法

Web開発では、ユーザーの場所に基づいてコンテンツまたはサービスを推奨することが一般的な要件になりました。このような地理的位置クエリを処理する場合、多数の緯度データと経度データの取得が含まれます。クエリ速度を改善するために、MySQLの空間インデックス作成と合理的なSQL戦略を使用できます。

緯度と経度を含むデータテーブルを構築します

位置情報を保存するために使用される場所と呼ばれるテーブルがあり、フィールドにはID名前緯度、および経度が含まれるとします。クエリ効率を改善するには、緯度と経度のフィールドに空間インデックスを作成する必要があります。

テーブルの場所を変更すると、Spatial Index index_name(緯度、経度)が追加されます。

Haversineフォーミュラを使用した位置フィルタリング

PHPでは、SQLステートメントをHaversine式と組み合わせて、ターゲットポイントまでの距離を計算して、近くの場所のクエリ関数を実現できます。

$ latitude = 37.7749; //クエリポイントの緯度$経度= -122.4194; //クエリポイントの経度$距離= 10; //クエリポイントの半径(キロメートル)

$ query = "id、name、latitude、ruceitudeを選択する
         (6371 * acs(cos(radians($ latitude)) * cos(radians(latitude)) *
         cos(ラジアン(経度) - ラジアン($経度)) +
         sin(radians($ latitude)) * sin(radians(latitude)))distance
         場所から
         距離を所有つ<= $距離
         距離による注文 ";

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

この方法は、インデックスと距離フィルタリングを組み合わせて、不必要な移動操作を大幅に削減し、特に場所の推奨事項またはMAPタイプのサービスに適しています。

ページネーションクエリ最適化スキル

大規模なデータリストを表示すると、ページネーションクエリは非常に一般的ですが、データボリュームが大きい場合、従来のページングは​​パフォーマンスボトルネックになりやすいです。限界条項と組み合わせたインデックスフィールドを使用することにより、指定された範囲内のデータを効率的に抽出できます。

ページングフィールドのインデックス付け

ページングがフィールド(プライマリキーIDなど)に基づいている場合、フィールドにインデックスを作成する必要があります。

books(id)にindex_nameを作成します。

PHPページネーションクエリコードの例

以下は、一般的に使用されているページネーションクエリ実装方法です。

$ page = 1; //今のページ番号$ perage = 10; //ページごとのレコード数$ offset =($ page -1) * $ perpage;

$ query = "select * from Books
         IDによる注文
         $ offset、$ perage "を制限します";

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

複雑なサブ征服またはより大きなオフセットシナリオと比較して、特にデータボリュームが百万レベルのレベルに達すると、インデックスフィールドと組み合わされた制限ページングは​​データベースの負担を大幅に減らすことができます。

要約します

ロケーションベースのデータサービスであろうと、従来のデータページングリストであろうと、効率的なインデックス作成戦略は常にデータベースの最適化の中核です。 MySQLで空間インデックスとハーシン式を使用すると、地理的位置フィルタリングを迅速に実現できます。ページングシナリオでは、フィールドインデックスと制限ステートメントを組み合わせることで、データの検索効率を改善できます。開発者は、ビジネスシナリオに従ってこれらの手法を柔軟に使用して、アプリケーションのパフォーマンスを確実にサポートする必要があります。