Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Sylvain Lafontaine
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution utilisés.
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"Gilles TOURREAU" wrote in message news:
Bonjour tout le monde !
En terme de performance, faut-il mieux utiliser LIKE ou LEFT pour executer ce genre de condition :
WHERE Rubrique LIKE 'ABCD%'; ou WHERE LEFT(Rubrique, 4) = 'ABCD';
En vous remerciant par avances de vos lumières !
Cordialement
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE
parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et
sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution
utilisés.
--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF
"Gilles TOURREAU" <gilles.tourreau@pos.fr> wrote in message
news:mn.f5947d682e9eb5f2.52180@pos.fr...
Bonjour tout le monde !
En terme de performance, faut-il mieux utiliser LIKE ou LEFT pour executer
ce genre de condition :
WHERE Rubrique LIKE 'ABCD%';
ou
WHERE LEFT(Rubrique, 4) = 'ABCD';
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution utilisés.
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"Gilles TOURREAU" wrote in message news:
Bonjour tout le monde !
En terme de performance, faut-il mieux utiliser LIKE ou LEFT pour executer ce genre de condition :
WHERE Rubrique LIKE 'ABCD%'; ou WHERE LEFT(Rubrique, 4) = 'ABCD';
En vous remerciant par avances de vos lumières !
Cordialement
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
zoltix
Sylvain Lafontaine wrote:
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution utilisés.
le like est un goufre de performance mais je ne sais pour le left.
Mais il y'a une bonne documentation va voir le point 9 http://sql.developpez.com/optimiser/
Sylvain Lafontaine wrote:
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE
parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et
sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution
utilisés.
le like est un goufre de performance mais je ne sais pour le left.
Mais il y'a une bonne documentation va voir le point 9
http://sql.developpez.com/optimiser/
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution utilisés.
le like est un goufre de performance mais je ne sais pour le left.
Mais il y'a une bonne documentation va voir le point 9 http://sql.developpez.com/optimiser/
Sylvain Lafontaine
Le like est vraiment un goufre avec des choses comme "%abc%" mais pour "abc%", c'est vraiment moins pire.
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"zoltix" wrote in message news:44f6a1f6$0$6604$
Sylvain Lafontaine wrote:
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution utilisés.
le like est un goufre de performance mais je ne sais pour le left.
Mais il y'a une bonne documentation va voir le point 9 http://sql.developpez.com/optimiser/
Le like est vraiment un goufre avec des choses comme "%abc%" mais pour
"abc%", c'est vraiment moins pire.
--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF
"zoltix" <NewsGroup@lli.be> wrote in message
news:44f6a1f6$0$6604$9a6e19ea@unlimited.newshosting.com...
Sylvain Lafontaine wrote:
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE
parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index
et sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution
utilisés.
le like est un goufre de performance mais je ne sais pour le left.
Mais il y'a une bonne documentation va voir le point 9
http://sql.developpez.com/optimiser/
Le like est vraiment un goufre avec des choses comme "%abc%" mais pour "abc%", c'est vraiment moins pire.
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"zoltix" wrote in message news:44f6a1f6$0$6604$
Sylvain Lafontaine wrote:
À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index et sera obligé de faire un table scan sur toute la table Rubrique.
Évidemment, l'idéal pour vous serait de regarder les plans d'exécution utilisés.
le like est un goufre de performance mais je ne sais pour le left.
Mais il y'a une bonne documentation va voir le point 9 http://sql.developpez.com/optimiser/
Christian Robert
J'ai fait un test avec une table comportant un champ nom sur 7 millions d'enregistrements :
SELECT * FROM MaTable WHERE LEFT(Nom, 3) = 'ALB'
SELECT * FROM MaTable WHERE Nom LIKE 'ALB%'
Un index est présent sur Nom.
La seconde est beaucoup plus rapide, en terme de pages lues, la première est à 16000 la seconde à 9.
Effectivement la déffirénce entre les 2 c'est que l'index est utilisé correctement avec le LIKE, ce qui n'est pas le cas avec la première.
Pour les allergiques aux LIKE une autre alternative :
SELECT * FROM Temp WHERE Nom <= 'ALB' + REPLICATE ('Z', 197) AND Nom >= 'ALB' + REPLICATE (' ', 197)
Dont les performance sont identiques au LIKE dans le cas de cette requête.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Sylvain Lafontaine" a écrit :
Le like est vraiment un goufre avec des choses comme "%abc%" mais pour "abc%", c'est vraiment moins pire.
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"zoltix" wrote in message news:44f6a1f6$0$6604$ > Sylvain Lafontaine wrote: >> À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE >> parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index >> et sera obligé de faire un table scan sur toute la table Rubrique. >> >> Évidemment, l'idéal pour vous serait de regarder les plans d'exécution >> utilisés. >> > le like est un goufre de performance mais je ne sais pour le left. > > Mais il y'a une bonne documentation va voir le point 9 > http://sql.developpez.com/optimiser/
J'ai fait un test avec une table comportant un champ nom sur 7 millions
d'enregistrements :
SELECT *
FROM MaTable
WHERE LEFT(Nom, 3) = 'ALB'
SELECT *
FROM MaTable
WHERE Nom LIKE 'ALB%'
Un index est présent sur Nom.
La seconde est beaucoup plus rapide, en terme de pages lues, la première est
à 16000 la seconde à 9.
Effectivement la déffirénce entre les 2 c'est que l'index est utilisé
correctement avec le LIKE, ce qui n'est pas le cas avec la première.
Pour les allergiques aux LIKE une autre alternative :
SELECT *
FROM Temp
WHERE Nom <= 'ALB' + REPLICATE ('Z', 197)
AND Nom >= 'ALB' + REPLICATE (' ', 197)
Dont les performance sont identiques au LIKE dans le cas de cette requête.
--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
"Sylvain Lafontaine" a écrit :
Le like est vraiment un goufre avec des choses comme "%abc%" mais pour
"abc%", c'est vraiment moins pire.
--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF
"zoltix" <NewsGroup@lli.be> wrote in message
news:44f6a1f6$0$6604$9a6e19ea@unlimited.newshosting.com...
> Sylvain Lafontaine wrote:
>> À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE
>> parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index
>> et sera obligé de faire un table scan sur toute la table Rubrique.
>>
>> Évidemment, l'idéal pour vous serait de regarder les plans d'exécution
>> utilisés.
>>
> le like est un goufre de performance mais je ne sais pour le left.
>
> Mais il y'a une bonne documentation va voir le point 9
> http://sql.developpez.com/optimiser/
J'ai fait un test avec une table comportant un champ nom sur 7 millions d'enregistrements :
SELECT * FROM MaTable WHERE LEFT(Nom, 3) = 'ALB'
SELECT * FROM MaTable WHERE Nom LIKE 'ALB%'
Un index est présent sur Nom.
La seconde est beaucoup plus rapide, en terme de pages lues, la première est à 16000 la seconde à 9.
Effectivement la déffirénce entre les 2 c'est que l'index est utilisé correctement avec le LIKE, ce qui n'est pas le cas avec la première.
Pour les allergiques aux LIKE une autre alternative :
SELECT * FROM Temp WHERE Nom <= 'ALB' + REPLICATE ('Z', 197) AND Nom >= 'ALB' + REPLICATE (' ', 197)
Dont les performance sont identiques au LIKE dans le cas de cette requête.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Sylvain Lafontaine" a écrit :
Le like est vraiment un goufre avec des choses comme "%abc%" mais pour "abc%", c'est vraiment moins pire.
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"zoltix" wrote in message news:44f6a1f6$0$6604$ > Sylvain Lafontaine wrote: >> À vue de nez, comme ça, sans trop réfléchir, il vaut mieux utiliser LIKE >> parce qu'avec LEFT, l'optimiseur de plan ne pourra pas utiliser d'index >> et sera obligé de faire un table scan sur toute la table Rubrique. >> >> Évidemment, l'idéal pour vous serait de regarder les plans d'exécution >> utilisés. >> > le like est un goufre de performance mais je ne sais pour le left. > > Mais il y'a une bonne documentation va voir le point 9 > http://sql.developpez.com/optimiser/
Fred BROUARD
Bonjour,
Gilles TOURREAU a écrit :
Bonjour tout le monde !
En terme de performance, faut-il mieux utiliser LIKE ou LEFT pour executer ce genre de condition :
WHERE Rubrique LIKE 'ABCD%'; ou WHERE LEFT(Rubrique, 4) = 'ABCD';
En vous remerciant par avances de vos lumières !
Cordialement
LIKE utilise l'index si les joker sont en fin de mot.
LEFT ne l'utilisera JAMAIS quelque soit les conditions.
Si vous avez de fréquente recherches à faire du genre LIKE '%ABC', alors créer une colonne calculée indexée dont le contenu est l'inverse de l'originale (fonction SQL REVERSE) dès lors vos requêtes LIKE '%ABC' deviendront des requêtes LIKE 'CBA%' qui seront elles aussi indexées.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Bonjour,
Gilles TOURREAU a écrit :
Bonjour tout le monde !
En terme de performance, faut-il mieux utiliser LIKE ou LEFT pour
executer ce genre de condition :
WHERE Rubrique LIKE 'ABCD%';
ou
WHERE LEFT(Rubrique, 4) = 'ABCD';
En vous remerciant par avances de vos lumières !
Cordialement
LIKE utilise l'index si les joker sont en fin de mot.
LEFT ne l'utilisera JAMAIS quelque soit les conditions.
Si vous avez de fréquente recherches à faire du genre LIKE '%ABC', alors
créer une colonne calculée indexée dont le contenu est l'inverse de
l'originale (fonction SQL REVERSE) dès lors vos requêtes LIKE '%ABC'
deviendront des requêtes LIKE 'CBA%' qui seront elles aussi indexées.
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
En terme de performance, faut-il mieux utiliser LIKE ou LEFT pour executer ce genre de condition :
WHERE Rubrique LIKE 'ABCD%'; ou WHERE LEFT(Rubrique, 4) = 'ABCD';
En vous remerciant par avances de vos lumières !
Cordialement
LIKE utilise l'index si les joker sont en fin de mot.
LEFT ne l'utilisera JAMAIS quelque soit les conditions.
Si vous avez de fréquente recherches à faire du genre LIKE '%ABC', alors créer une colonne calculée indexée dont le contenu est l'inverse de l'originale (fonction SQL REVERSE) dès lors vos requêtes LIKE '%ABC' deviendront des requêtes LIKE 'CBA%' qui seront elles aussi indexées.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************