Je ne suis pas expert en base de données, mais j'ai assez de connaissances pour me mettre dans le pétrin, comme c'est le cas ici. Cette requêtePourquoi cette requête postgresql est-elle si lente?
SELECT DISTINCT p.*
FROM points p, areas a, contacts c
WHERE ( p.latitude > 43.6511659465
AND p.latitude < 43.6711659465
AND p.longitude > -79.4677941889
AND p.longitude < -79.4477941889)
AND p.resource_type = 'Contact'
AND c.user_id = 6
est extrêmement lente. La table de points a moins de 2000 enregistrements, mais il faut environ 8 secondes pour l'exécuter. Il y a des index sur les colonnes de latitude et de longitude. La suppression de la clause concerant le type_ressource et l'id_utilisateur ne fait aucune différence.
Les champs de latitude et de longitude sont tous deux formatés en nombre (15,10) - J'ai besoin de la précision pour certains calculs.
Il y a beaucoup, beaucoup d'autres requêtes dans ce projet où les points sont comparés, mais aucun problème de temps d'exécution. Que se passe-t-il?
S'il vous plaît poster un Explain. Distinct est souvent un problème de performance. Assurez-vous également que la latitude et la longitude sont indexées. –