|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||
|
Invité régulier
![]() Inscription : novembre 2005 Messages : 23 ![]() |
Bonjour à tous,
J'ai une table tbl_clients qui contient environ 600 000 lignes (nombre qui va probablement doubler d'ici 1 an) Voici les infos complètes : Code :
Code :
Code :
Code :
J'ai essayé d'optimiser via le work_meme : j'ai fait un test en ajoutant un SET work_mem TO '10MB'; avant de lancer la requête. Voici les résultats en secondes : colonne 1 = valeur du work_mem, colonne 2 = millisecondes) Code :
shared_buffer est à 24MB Je ne sais pas bien comment optimiser cette requête. Elle est importante car elle me sert à créer un arbre des catégories en PHP pour un site internet. Elle est donc utilisée souvent. J'ai "pensé" au work_mem et au shared_buffer à force de parcourir les messages liés à l'optimisation sur le forum, mais je ne suis pas expert. Sinon j'ai aussi fait un VACUUM, un ANALYSE, et même un REINDEX TABLE tbl_clients. En espérant vous avoir donné les informations nécessaires pour que vous puissiez m'aider. Kimaidou |
||||||||||
|
|
00
|
|
|
#2 | ||
|
Invité régulier
![]() Inscription : novembre 2005 Messages : 23 ![]() |
Je poste ici le résultat de l'explain analyse (qui prends 13 secondes, alors que la requête simple prend 2s)
Code :
|
||
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Dès lors que vous utilisez des données et fonctions non relationnelles comme celles du spatial et à moins que le prédicat dans lequel figure les expressions spatiales soit "sargeable", vous ne pourrez prétendre à des performances.
Or ce n'est pas le cas de deux de vos prédicats : Code :
DISTANCE( TRANSFORM(tc.the_geom, 27582) , TRANSFORM(ST_SetSRID(ST_MakePoint(3.8853803239425,43.598034187644),4326), 27582) ) <= 5000 Code :
ST_DWithin(tc.the_geom, ST_SetSRID(ST_MakePoint(3.8853803239425,43.598034187644),4326) ,0.4) A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#4 |
![]() ![]() Inscription : octobre 2008 Messages : 1 505 ![]() |
Quelques remarques:
- shared_buffers à 24Mb c'est vraiment peu. cet espace est alloué une seule fois au démarrage de postgres et on y met plutôt une valeur du quart à la moitié de la mémoire physique, suivant que le serveur est dédié au sgbd ou pas. - cette ligne-là: Code :
Nested Loop (cost=12608.71..243345.48 rows=1 width=27) (actual time=68.167..13606.351 rows=68664 loops=1) - si tu fais la même requête après avoir passé: est-ce que les résultats sont meilleurs? (à exécuter 2 fois pour bénéficier du cache disque). Ca va probablement provoquer un scan séquentiel sur la table tbl_clients ce qui est peut-être plus adapté, à voir. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com