Dans le développement Web, la recommandation de contenu ou de services basée sur l'emplacement des utilisateurs est devenue une exigence commune. Lors du traitement de ces requêtes de localisation géographique, elle implique la récupération d'un grand nombre de données de latitude et de longitude. Afin d'améliorer la vitesse de requête, l'indexation spatiale de MySQL et les stratégies SQL raisonnables peuvent être utilisées.
Supposons qu'il existe un tableau appelé emplacements qui est utilisé pour stocker les informations de localisation, et les champs incluent l'ID , le nom , la latitude et la longitude . Afin d'améliorer l'efficacité de la requête, il est nécessaire de créer un indice spatial pour les champs de latitude et de longitude:
Les emplacements de la table alter ajoutent l'index spatial index_name (latitude, longitude);
En PHP, les instructions SQL peuvent être combinées avec la formule Haversine pour calculer la distance au point cible pour réaliser la fonction de requête des emplacements à proximité:
$ latitude = 37,7749; // la latitude du point de requête $ longitude = -122.4194; // la longitude du point de requête $ Distance = 10; // le rayon du point de requête (kilomètres) $ query = "SELECT ID, nom, latitude, longitude, (6371 * ACS (cos (radians ($ latitude)) * cos (radians (latitude)) * cos (radians (longitude) - radians ($ longitude)) + péché (radians ($ latitude)) * sin (radians (latitude))) comme distance Des emplacements Avoir une distance <= $ distance Ordre par distance "; $ result = mysqli_query ($ Connection, $ query);
Cette méthode combine l'indexation et le filtrage à distance pour réduire considérablement les opérations de traversée inutiles, et est particulièrement adapté aux recommandations de localisation ou aux services de type carte.
Les requêtes de pagination sont extrêmement courantes lors de l'affichage de grandes listes de données, mais la pagination traditionnelle est sujette aux goulots d'étranglement des performances lorsque le volume de données est important. En utilisant des champs d'index combinés avec des clauses limites , les données dans une plage spécifiée peuvent être extraites efficacement.
Si la pagination est basée sur un champ (comme l'ID de clé primaire), il est nécessaire d'indexer le champ:
Créer index index_name sur les livres (id);
Les éléments suivants sont des méthodes de mise en œuvre de la requête de pagination couramment utilisées:
$ page = 1; // Numéro de page actuel $ percage = 10; // Nombre d'enregistrements par page $ offset = ($ page - 1) * $ percage; $ query = "select * dans les livres Commande par id Limiter $ offset, $ percage "; $ result = mysqli_query ($ Connection, $ query);
Par rapport à des sous-requêtes complexes ou à des scénarios de décalage plus grands, la pagination limite combinée avec les champs d'index peut réduire considérablement la charge de la base de données, en particulier lorsque le volume de données atteint le niveau à un million de niveaux.
Qu'il s'agisse de services de données basés sur la localisation ou de listes traditionnelles de pagination de données, les stratégies d'indexation efficaces sont toujours au cœur de l'optimisation de la base de données. L'utilisation d'index spatiaux et de formules Haversine dans MySQL peut rapidement réaliser le filtrage de l'emplacement géographique; Pendant que dans les scénarios de pagination, la combinaison d'index de champ et de limites peut améliorer l'efficacité de la récupération des données. Les développeurs doivent utiliser de manière flexible ces techniques en fonction de leurs scénarios commerciaux pour fournir un support solide pour les performances des applications.