Web開発では、ユーザーの場所に基づいてコンテンツまたはサービスを推奨することが一般的な要件になりました。このような地理的位置クエリを処理する場合、多数の緯度データと経度データの取得が含まれます。クエリ速度を改善するために、MySQLの空間インデックス作成と合理的なSQL戦略を使用できます。
位置情報を保存するために使用される場所と呼ばれるテーブルがあり、フィールドにはID 、名前、緯度、および経度が含まれるとします。クエリ効率を改善するには、緯度と経度のフィールドに空間インデックスを作成する必要があります。
テーブルの場所を変更すると、Spatial Index index_name(緯度、経度)が追加されます。
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を作成します。
以下は、一般的に使用されているページネーションクエリ実装方法です。
$ page = 1; //今のページ番号$ perage = 10; //ページごとのレコード数$ offset =($ page -1) * $ perpage; $ query = "select * from Books IDによる注文 $ offset、$ perage "を制限します"; $ result = mysqli_query($ connection、$ query);
複雑なサブ征服またはより大きなオフセットシナリオと比較して、特にデータボリュームが百万レベルのレベルに達すると、インデックスフィールドと組み合わされた制限ページングはデータベースの負担を大幅に減らすことができます。
ロケーションベースのデータサービスであろうと、従来のデータページングリストであろうと、効率的なインデックス作成戦略は常にデータベースの最適化の中核です。 MySQLで空間インデックスとハーシン式を使用すると、地理的位置フィルタリングを迅速に実現できます。ページングシナリオでは、フィールドインデックスと制限ステートメントを組み合わせることで、データの検索効率を改善できます。開発者は、ビジネスシナリオに従ってこれらの手法を柔軟に使用して、アプリケーションのパフォーマンスを確実にサポートする必要があります。