Constat : les FBI (function-based index) ne sont pas disponibles
en MySQL.
Comment faire dans ce cas pour obtenir par exemple l’équivalent
de l’index suivant ?
CREATE INDEX idx_str_len ON my_table
(length(str));
Une des solutions les plus simples consiste à utiliser un
trigger qui assurera la mise à jour d’une
colonne supplémentaire que l’on créera dans la table cible.
Partons de la table suivante :
CREATE TABLE `t` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`date` timestamp NOT NULL,
`str` varchar(100) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Le but est de pouvoir obtenir une réponse rapide à la requête
suivante :
select sql_no_cache count(*) from t where length(str) …
[Lire plus]