REGEXP ou WHERE
18 messages
• Page 1 sur 2 • 1, 2
- dudo
- WRInaute occasionnel

- Messages: 456
- Inscription: 10 Jan 2004
REGEXP ou WHERE
bonjour,
Je pose comme constat que
LIKE est 2 à 4 fois plus lent que REGEXP
vous pouvez le vérifier
donc interroger une table de cette maniere
WHERE (titre) REGEXP ('toto|titi|tutu')
est plus court que :
WHERE titre LIKE '%toto%' OR titre LIKE '%titi%' OR titre LIKE '%tutu%'
Maintenant, je souhaite votre avis plus rapide certe, mais est ce plus gourmand en ressouces ? donc est ce une bonne optimisation ?
Merci pour votre avis
ludo
Je pose comme constat que
LIKE est 2 à 4 fois plus lent que REGEXP
vous pouvez le vérifier
donc interroger une table de cette maniere
WHERE (titre) REGEXP ('toto|titi|tutu')
est plus court que :
WHERE titre LIKE '%toto%' OR titre LIKE '%titi%' OR titre LIKE '%tutu%'
Maintenant, je souhaite votre avis plus rapide certe, mais est ce plus gourmand en ressouces ? donc est ce une bonne optimisation ?
Merci pour votre avis
ludo
-

Xou - WRInaute discret

- Messages: 187
- Inscription: 2 Juin 2006
Je vais peut-être m'avancer un peu vite... je n'ai aucune certitude à dire cela, mais je parts toujours du principe que si la méthode se révèle plus rapide c'est forcemment la bonne car ça libère plus rapidement les les ressources pour les autres utilisateurs.
-

siddhy - WRInaute discret

- Messages: 163
- Inscription: 20 Sep 2004
Salut,
Je viens de tester les 2 manières, et pour moi le LIKE est plus rapide que le REGEXP...
WHERE (`nom_residence`) REGEXP ('dom|kang|blanc') => (5 total, traitement: 0.0338 sec.)
WHERE `nom_residence` LIKE ('%dom%') OR `nom_residence` LIKE ('%kang%')OR `nom_residence` LIKE ('%blanc%') => (5 total, traitement: 0.0051 sec.)
Quelqu'un aurait il d'autres résultats ?
Je viens de tester les 2 manières, et pour moi le LIKE est plus rapide que le REGEXP...
WHERE (`nom_residence`) REGEXP ('dom|kang|blanc') => (5 total, traitement: 0.0338 sec.)
WHERE `nom_residence` LIKE ('%dom%') OR `nom_residence` LIKE ('%kang%')OR `nom_residence` LIKE ('%blanc%') => (5 total, traitement: 0.0051 sec.)
Quelqu'un aurait il d'autres résultats ?
- dudo
- WRInaute occasionnel

- Messages: 456
- Inscription: 10 Jan 2004
REGEXP meilleur
siddhy a écrit:Salut,
Je viens de tester les 2 manières, et pour moi le LIKE est plus rapide que le REGEXP...
WHERE (`nom_residence`) REGEXP ('dom|kang|blanc') => (5 total, traitement: 0.0338 sec.)
WHERE `nom_residence` LIKE ('%dom%') OR `nom_residence` LIKE ('%kang%')OR `nom_residence` LIKE ('%blanc%') => (5 total, traitement: 0.0051 sec.)
Quelqu'un aurait il d'autres résultats ?
Re,
Cela dit Le temps de traitement depend de plusieurs parametres:
Pour moi REGEXP est un peu + rapide avec une BDD de 15000
et des departements 18 ("44|49|53|72|76|85|27|14|50|61..)
0,490 contre 0,540 pondere sur 7 tests consécutifs
Mais j'ai vu mieux beaucoup mieux, cela dit c'est aussi + facile à écrire,
reste les ressources utilisées.
D'autres tests SVP seraient utiles
ludo
- jarreweb
- WRInaute discret

- Messages: 192
- Inscription: 12 Sep 2003
essayez de voir si il n'y a pas de possibilité d'utiliser des index au lieu de LIKE ou REGEXP
la vitesse de traitement est fulgurante.
dans ma profession, je manipule des tables avec plusieurs centaines de milliers d'entrées et les requêtes se font en à peine en à peine 0.0500 sec. (ce qui pour certains est déjà beaucoup)plus d'infos sur http://dev.mysql.com/doc/refman/5.0/fr/ ... dexes.html
la vitesse de traitement est fulgurante.
dans ma profession, je manipule des tables avec plusieurs centaines de milliers d'entrées et les requêtes se font en à peine en à peine 0.0500 sec. (ce qui pour certains est déjà beaucoup)plus d'infos sur http://dev.mysql.com/doc/refman/5.0/fr/ ... dexes.html
-

siddhy - WRInaute discret

- Messages: 163
- Inscription: 20 Sep 2004
Je viens de refaire des tests sur une autre BDD + importante (table avec 12 000 enregistrements ) en plain text :
REGEXP => (419 total, traitement: 0.0807 sec.)
LIKE => (419 total, traitement: 0.0118 sec.)
et j'ai rechargé plusieurs fois...
Peut être que sur des champs text LIKE est + rapide et sur des champs numériques, c'est REGEXP qui est plus rapide..?..
REGEXP => (419 total, traitement: 0.0807 sec.)
LIKE => (419 total, traitement: 0.0118 sec.)
et j'ai rechargé plusieurs fois...
Peut être que sur des champs text LIKE est + rapide et sur des champs numériques, c'est REGEXP qui est plus rapide..?..
- dudo
- WRInaute occasionnel

- Messages: 456
- Inscription: 10 Jan 2004
REGEXP
siddhy a écrit:Je viens de refaire des tests sur une autre BDD + importante (table avec 12 000 enregistrements ) en plain text :
REGEXP => (419 total, traitement: 0.0807 sec.)
LIKE => (419 total, traitement: 0.0118 sec.)
et j'ai rechargé plusieurs fois...
Peut être que sur des champs text LIKE est + rapide et sur des champs numériques, c'est REGEXP qui est plus rapide..?..
Re
Tout à fait la requête elle même, le type et le nombre de champs
sur lequel porte la requete, ton resultat à 0,0 est bon pour 12000 il porte sur combien de champs ?
Par ailleurs, en terme de test je pense à un client mySQL donnant
les temps à chaque commande.
Pou repondre à jarreweb, utiliser where et REGEXP ou pas mais avec index bien sûr dans tous les cas c'est preferable.
debat reste oouvert
ludo
-

Xou - WRInaute discret

- Messages: 187
- Inscription: 2 Juin 2006
Test effectué sur la base de donnée insee des communes de france (38949 enregistrements):
(33 total, traitement: 0.0335 sec.)
(33 total, traitement: 0.1358 sec.)
Comme le dit siddhy, y'a pas photo !
- Code: Tout sélectionner
SELECT * FROM `communes` where `cp` like ('%28210%') OR `cp` like ('%28250%') OR `cp` like ('%33000%') OR `cp` like ('%72000%') OR `cp` like ('%37000%') OR `cp` like ('%28000%') OR `cp` like ('%75015%') OR `cp` like ('%06000%');
(33 total, traitement: 0.0335 sec.)
- Code: Tout sélectionner
SELECT * FROM `communes` where (`cp`) REGEXP ('28210|28250|33000|72000|37000|28000|75015|06000');
(33 total, traitement: 0.1358 sec.)
Comme le dit siddhy, y'a pas photo !
-

Xou - WRInaute discret

- Messages: 187
- Inscription: 2 Juin 2006
Effectivement on gagne un peu, même si le champ n'est pas indexé:
(33 total, traitement: 0.0299 sec.) contre (33 total, traitement: 0.0335 sec.) avec 2 modulos
par contre en virant le modulo on perd:
(33 total, traitement: 0.0428 sec.)
- Code: Tout sélectionner
SELECT * FROM `communes` where `cp` like ('28210%') OR `cp` like ('28250%') OR `cp` like ('33000%') OR `cp` like ('72000%') OR `cp` like ('37000%') OR `cp` like ('28000%') OR `cp` like ('75015%') OR `cp` like ('06000%')
(33 total, traitement: 0.0299 sec.) contre (33 total, traitement: 0.0335 sec.) avec 2 modulos
par contre en virant le modulo on perd:
- Code: Tout sélectionner
SELECT * FROM `communes` where `cp` like ('28210') OR `cp` like ('28250') OR `cp` like ('33000') OR `cp` like ('72000') OR `cp` like ('37000') OR `cp` like ('28000') OR `cp` like ('75015') OR `cp` like ('06000')
(33 total, traitement: 0.0428 sec.)
18 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


