J'ai une table de 320000 lignes qui contient des points de coordonnées lat/lon. Lorsqu'un utilisateur sélectionne un emplacement, mon programme obtient les coordonnées à partir de l'emplacement sélectionné et exécute une requête qui amène tous les points de la table qui sont proches. Ceci est fait en calculant la distance entre le point sélectionné et chaque point de coordonnée de ma rangée de table. Ceci est la requête que j'utilise:Optimisation de la requête Sqlite pour INDEX
select street from locations
where ( ((lat - (-34.594804)) *(lat - (-34.594804))) + ((lon - (-58.377676))*(lon - (-58.377676))) <= ((0.00124)*(0.00124)))
group by street;
Comme vous pouvez le voir la clause WHERE est une formule simple Pythagore pour calculer la distance entre deux points. Maintenant, mon problème est que je ne peux pas obtenir un INDEX pour être utilisable. Je l'ai essayé avec
CREATE INDEX indx ON location(lat,lon)
aussi avec
CREATE INDEX indx ON location(street,lat,lon)
sans chance. J'ai remarqué que quand il y a une opération mathématique avec lat ou lon, l'index n'est pas appelé. Est-il possible d'optimiser cette requête pour utiliser un INDEX afin d'obtenir des résultats rapides?
Merci d'avance!
Salut Zane, pour autant que je lis, un index n'est appelé que s'il y a une clause WHERE qui a des colonnes (dans mon cas lat et lon) qui apparaissent dans l'index. L'ajout de la colonne id à côté de SELECT ne semble pas accélérer les choses. Merci! http://www2.sqlite.org/optoverview.html –