|
Bas de page | |
---|---|
Auteur | Sujet : MySQL : 1h pour une requête avec un NOT IN, conseils pour optimiser ? |
Publicité | Posté le 24-06-2014 à 20:35:20 |
el muchacho Comfortably Numb | Combien de résultats retournent les deux requêtes : et SELECT url FROM logs WHERE ip LIKE('245.345.%') et sont-elles rapides ? Message édité par el muchacho le 24-06-2014 à 21:54:30 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
gpl73 | vanquishV12: Distinct ... regarde en le remplaçant par un group by... si tu gagnes pas du temps Flo850 : pourquoi faire une requete left outer join donc ça donne simplement ça : select distinct a.url from logs as a Guillaume P.S.: En reprenant ta requête, on a: je veux les urls dont l'ip est 192.165... et je ne veux pas les url dont l'ip est '245.354' select distinct url from log where ip like '192.165.%' and ip not like '245.345.%' Message cité 3 fois Message édité par gpl73 le 25-06-2014 à 00:17:56 --------------- mieux vaut être un con au chaud, qu'un con gelé lol |
lasnoufle La seule et unique! |
Pour ta remarque a la fin, ca ne donne pas le meme resultat. Par exemple si tu as: La requete initiale ne retourne pas URL1 mais la tienne si. Edit: bien sur c'est si les URLs ne sont pas uniques, mais bon vu qu'il y a un DISTINCT je suppose qu'elle ne le sont pas sinon on peut aussi virer le distinct direct. Message édité par lasnoufle le 25-06-2014 à 02:42:12 --------------- C'était vraiment très intéressant. |
Yonel Monde de merde ! |
|
Yonel Monde de merde ! | Moi je tenterais, dans l'ordre:
Message édité par Yonel le 25-06-2014 à 04:27:00 |
Yonel Monde de merde ! | Et les instructions LIKE ne posent pas de problème de performance si les champs sont correctement indexés et que le wildcard est à la fin comme ici. |
ddr555 | index sur url + ip pour gagner du temps. Il faut placer en premier le plus restrictif des deux |
Publicité | Posté le 25-06-2014 à 09:34:22 |
vanquishV12 se coucher tard nuit | Merci j'ai ajouté un index sur IP
--------------- Bha ouais mais bon, m'enfin quoi... |
rufo Pas me confondre avec Lycos! | Tu peux remplacer le distinct par un group by. --------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
vanquishV12 se coucher tard nuit | C'est fait mais ça n'accélère pas
--------------- Bha ouais mais bon, m'enfin quoi... |
Yonel Monde de merde ! |
|
rufo Pas me confondre avec Lycos! | Sur MySql oui, le group by est en général plus rapide qu'un DISTINCT.
--------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
Yonel Monde de merde ! | Intéressant, je serais curieux de savoir dans quel cas ça se produit. Tu as des exemples ?
|
lasnoufle La seule et unique! | Sinon, il n'y a pas longtemps sous Oracle, j'ai eu un cas ou utiliser un filtre sur ROW_NUMBER() WITHING GROUP(ORDER BY xxx) = 1 (en gros) etait plus performant qu'un DISTINCT ou un GROUP BY.
--------------- C'était vraiment très intéressant. |
vanquishV12 se coucher tard nuit |
Au fait, merci, mais sur mon MySql, exception join ne passe pas Parmi tout ce qui a été proposé la requête de Yonel est très largement plus rapide que les autres. Message édité par vanquishV12 le 25-06-2014 à 21:18:26 --------------- Bha ouais mais bon, m'enfin quoi... |
Yonel Monde de merde ! | Je pense que le type 'text' n'est pas adapté pour stocker des URL. Ca doit effectivement poser des problèmes de rapidité car il est assez coûteux de faire des conditions du genre monTexte1 = monTexte2 dans un WHERE.
Message édité par Yonel le 26-06-2014 à 03:46:28 |
Pablo Escrobarbe Retour d'exil | Je sais pas si ça a été dit mais le NOT IN consomme beaucoup plus qu'un LEFT JOIN si tu as des index. Message édité par Pablo Escrobarbe le 26-06-2014 à 10:19:51 --------------- Viens jouer aux Rébus sur HFR |
vanquishV12 se coucher tard nuit | Merci. J'ai rajouté des index sur IP et URL (pas les deux ensemble, il le faut ?) et j'ai mis varchar 1000 au lieu de text pour les URL
--------------- Bha ouais mais bon, m'enfin quoi... |
flo850 moi je | la requete que j'ai mis au debut remplace le not in par une jointure --------------- |
vanquishV12 se coucher tard nuit | ok merci, mais pour le IN ? --------------- Bha ouais mais bon, m'enfin quoi... |
Yonel Monde de merde ! | Pour le IN, en reprenant la requête de flo850, c'est juste une jointure toute bête :
|
Yonel Monde de merde ! |
Message cité 2 fois Message édité par Yonel le 30-06-2014 à 05:46:46 |
Pablo Escrobarbe Retour d'exil |
Message cité 1 fois Message édité par Pablo Escrobarbe le 30-06-2014 à 10:31:55 --------------- Viens jouer aux Rébus sur HFR |
Yonel Monde de merde ! |
|
rufo Pas me confondre avec Lycos! |
Merci pour cette recherche approfondie. J'aurai appris des trucs grâce à toi --------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
LeRiton | En termes d'optim, les adresses IPv4 doivent être stockées en tant que INT UNSIGNED, puis en utilisant INET_ATON / INET_NTOA.
|
vanquishV12 se coucher tard nuit | Merci à tous ce topic est vraiment très enrichissant --------------- Bha ouais mais bon, m'enfin quoi... |
Pablo Escrobarbe Retour d'exil | Et le nombre de dév qui savent pas utiliser un group by à cause de mysql c'est effarant. --------------- Viens jouer aux Rébus sur HFR |
rufo Pas me confondre avec Lycos! |
Message cité 1 fois Message édité par rufo le 01-07-2014 à 12:03:32 --------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
LeRiton |
|
rufo Pas me confondre avec Lycos! | C'est toujours difficile à quantifier; ça dépend de la taille du jeu de données, du nb de jointures entre les tables (s'il y en a), de comment sont répartis les indexes, de comment tu as tuné le fichier de conf de mysql... L'optimisation de requêtes c'est tout une question de dosage, un peu comme la cuisine --------------- Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta |
ddr555 | surtout que dans une requête ce qui prend beaucoup de temps c'est la lecture disque, pas trop les tests de comparaison qui sont négligeables par rapport au reste du processus. on ne perd pas grand chose au final. sur un long processus ça peut nécessiter de gagner le maximum. pour une requête unique qui prend un seconde on s'en balance complètement ...
|
vanquishV12 se coucher tard nuit | Je profite de votre expertise pour vous demander comment faire et comment faire VITE pour avoir ce genre de résultats :
--------------- Bha ouais mais bon, m'enfin quoi... |
Pablo Escrobarbe Retour d'exil |
Publicité | Posté le |
Sujets relatifs | |
---|---|
Conseils sur les techno à utiliser | Recherche betatesteur pour logiciel d'optimisation PHP/MySQL |
automatiser la synchronisation de 2 base de donnée mysql et oracle | Équivalent de mysql_num_rows en PDO |
le nombre des In/Out à l'exécution d'une requete | Connexion permanent Excel Access - Requête multiple |
Location BDD mysql | Executer un script si nouvelle ligne dans une table MySQL |
Plus de sujets relatifs à : MySQL : 1h pour une requête avec un NOT IN, conseils pour optimiser ? |