Sur un site que j'ai développé il y a quelques années, je pouvais
faire une recherche telle que si je recherche une lettre accentuée,
mysql trouve la lettre accentuée ou non. Ainsi, la recherche suivante
Je suis en train de développer un nouveau site à partir de zéro et
j'ai donc créé une nouvelle base de données et écrit du code
entièrement nouveau. Mais la procédure pour préparer le query est
à peu près la même.
ancienne version : $mot = $_GET puis str_replace pour remplacer * par
%
et l'espace par % puis addslashes et $query = "select etc.
nouvelle version : $mot = valeur("mot") où valeur est cette fonction:
donc, je prends l'argument dans $_GET ou $_POST, je remplace les
* et ? par des équivalents SQL, et j'enlève les \ et ; pour me
protéger contre des infections de code. Les modifications sont
équivalentes.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Le champ dans la base SQL est pourtant codé comme
latin1_general_ci dans les deux cas, l'un est text et l'autre
un varchar(36). Dans les deux cas, pas d'énoncé dans l'entête
pour choisir un jeu de caractères.
On ne peut pas se permettre de générer une requête qui ignorera les index (comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'. Cependant avec des index calculées (fonction) ou des colonnes calculées indexées (ce qui revient au même) vous pouvez faire un "reverse" de la colonne et par conséquent faire en sorte que le like '%toto' active l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index rotatif que j'ai mis au point il y a quelques années...
Mais mon expérience ne se limite qu'à l'usage de deux SGBDR SQL. Je serais intéressé de confronter mes constatations à celles d'un utilisateur ou développeur d'une base telle Oracle ou Postgre.
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 Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
Mickaël Wolff a écrit :
[...]
On
ne peut pas se permettre de générer une requête qui ignorera les index
(comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'.
Cependant avec des index calculées (fonction) ou des colonnes calculées
indexées (ce qui revient au même) vous pouvez faire un "reverse" de la
colonne et par conséquent faire en sorte que le like '%toto' active l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index
rotatif que j'ai mis au point il y a quelques années...
Mais mon expérience ne se limite qu'à l'usage de deux SGBDR SQL. Je
serais intéressé de confronter mes constatations à celles d'un
utilisateur ou développeur d'une base telle Oracle ou Postgre.
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
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
On ne peut pas se permettre de générer une requête qui ignorera les index (comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'. Cependant avec des index calculées (fonction) ou des colonnes calculées indexées (ce qui revient au même) vous pouvez faire un "reverse" de la colonne et par conséquent faire en sorte que le like '%toto' active l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index rotatif que j'ai mis au point il y a quelques années...
Mais mon expérience ne se limite qu'à l'usage de deux SGBDR SQL. Je serais intéressé de confronter mes constatations à celles d'un utilisateur ou développeur d'une base telle Oracle ou Postgre.
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 Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
Pascal G.
Bonjour fred
[...]
On ne peut pas se permettre de générer une requête qui ignorera les index (comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'. Cependant avec des index calculées (fonction) ou des colonnes calculées indexées (ce qui revient au même) vous pouvez faire un "reverse" de la colonne et par conséquent faire en sorte que le like '%toto' active l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index rotatif que j'ai mis au point il y a quelques années...
Tu peux nous en dire un peu plus, ou nous indiquer un lien où tu en parles ?
@+ pascal G (aka paskal,FAQ OE)
Bonjour fred
[...]
On ne peut pas se permettre de générer une requête qui ignorera les index
(comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'.
Cependant avec des index calculées (fonction) ou des colonnes calculées
indexées (ce qui revient au même) vous pouvez faire un "reverse" de la
colonne et par conséquent faire en sorte que le like '%toto' active
l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index
rotatif que j'ai mis au point il y a quelques années...
Tu peux nous en dire un peu plus, ou nous indiquer un lien où tu en parles ?
On ne peut pas se permettre de générer une requête qui ignorera les index (comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'. Cependant avec des index calculées (fonction) ou des colonnes calculées indexées (ce qui revient au même) vous pouvez faire un "reverse" de la colonne et par conséquent faire en sorte que le like '%toto' active l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index rotatif que j'ai mis au point il y a quelques années...
Tu peux nous en dire un peu plus, ou nous indiquer un lien où tu en parles ?
@+ pascal G (aka paskal,FAQ OE)
helios
SQLpro a écrit :
Mickaël Wolff a écrit : [...]
On ne peut pas se permettre de générer une requête qui ignorera les index (comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'. Cependant avec des index calculées (fonction) ou des colonnes calculées indexées (ce qui revient au même) vous pouvez faire un "reverse" de la colonne et par conséquent faire en sorte que le like '%toto' active l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index rotatif que j'ai mis au point il y a quelques années...
risible
Mais mon expérience ne se limite qu'à l'usage de deux SGBDR SQL. Je serais intéressé de confronter mes constatations à celles d'un utilisateur ou développeur d'une base telle Oracle ou Postgre.
A +
SQLpro a écrit :
Mickaël Wolff a écrit :
[...]
On ne peut pas se permettre de générer une requête qui ignorera les
index (comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'.
Cependant avec des index calculées (fonction) ou des colonnes calculées
indexées (ce qui revient au même) vous pouvez faire un "reverse" de la
colonne et par conséquent faire en sorte que le like '%toto' active
l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index
rotatif que j'ai mis au point il y a quelques années...
risible
Mais mon expérience ne se limite qu'à l'usage de deux SGBDR SQL. Je
serais intéressé de confronter mes constatations à celles d'un
utilisateur ou développeur d'une base telle Oracle ou Postgre.
On ne peut pas se permettre de générer une requête qui ignorera les index (comme le fait la plupart du temps une requête utilisant like).
Ll'index sera utilisé si le LIKE est 'toto%', mais pas '%toto'. Cependant avec des index calculées (fonction) ou des colonnes calculées indexées (ce qui revient au même) vous pouvez faire un "reverse" de la colonne et par conséquent faire en sorte que le like '%toto' active l'index.
Enfin pour le cas du LIKE '%toto%' il existe la technique des index rotatif que j'ai mis au point il y a quelques années...
risible
Mais mon expérience ne se limite qu'à l'usage de deux SGBDR SQL. Je serais intéressé de confronter mes constatations à celles d'un utilisateur ou développeur d'une base telle Oracle ou Postgre.