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]