J'ai une base de données qui contient beaucoup de données géospatiales ... essentiellement des informations sur 10s de milliers de personnes, avec des coordonnées pour chacun d'eux. Les coordonnées sont actuellement stockées sous forme de deux flotteurs pour la latitude et la longitude, et j'utilise une fonction pour déterminer la distance entre les coordonnées de cet enregistrement et une coordonnée que je passe ... essentiellement pour trier et limiter les résultats que je reçois par la distance. C'est à peu près le code utilisé dans la fonction.MS SQL - Est-ce que le type de données de géométrie est utilisé pour trouver la distance de manière beaucoup plus rapide?
DECLARE @earthSphereRadiusKilometers as float
DECLARE @kilometerConversionToMilesFactor as float
SELECT @earthSphereRadiusKilometers = 6366.707019
SELECT @kilometerConversionToMilesFactor = .621371
-- convert degrees to radians
DECLARE @lat1Radians float
DECLARE @lon1Radians float
DECLARE @lat2Radians float
DECLARE @lon2Radians float
SELECT @lat1Radians = (@lat1Degrees/180) * PI()
SELECT @lon1Radians = (@lon1Degrees/180) * PI()
SELECT @lat2Radians = (@lat2Degrees/180) * PI()
SELECT @lon2Radians = (@lon2Degrees/180) * PI()
-- formula for distance from [lat1,lon1] to [lat2,lon2]
RETURN ROUND(2 * ASIN(SQRT(POWER(SIN((@lat1Radians - @lat2Radians)/2) ,2) + COS(@lat1Radians) * COS(@lat2Radians) * POWER(SIN((@lon1Radians - @lon2Radians)/2), 2))) * (@earthSphereRadiusKilometers * @kilometerConversionToMilesFactor), 4)
La procédure stockée prend 4 ou 5 secondes pour s'exécuter.
J'ai remarqué que SQL Azure prend désormais en charge le type de données de géométrie .. (ce n'était pas le cas lorsque j'ai créé la base de données). Donc, ma question est ... est-ce que j'aurais une augmentation significative de la vitesse d'exécution de ma procédure stockée qui me permettrait d'investir le temps qu'il faudrait pour passer à l'utilisation du type de données géométrique?
Merci!
Steven
Hey! Merci beaucoup. Très bonne réponse. Je vais aller de l'avant et faire les changements et ensuite répondre dans quelques jours avec un commentaire pour dire si il y avait une amélioration notable de la vitesse ou non, juste au cas où quelqu'un a une question similaire à l'avenir ... Je vais marquez votre réponse comme la bonne mais après avoir commenté! –
Salut. Je suis allé de l'avant et fait les changements. Bien que je crois que l'utilisation de la géographie soit plus efficace, il n'y avait pas de différence notable de vitesse, donc si quelqu'un d'autre en vient à un angle de "ça vaut le développement", je dirais probablement pas ... mais c'est pas trop dur à changer, alors pourquoi ne pas le faire quand même! Merci de votre aide. –
Très intéressant trouver Steven. Merci d'avoir partagé! –