post 16 of 32 · 12 June 2007 · written in French
MySQL ignores indexes when you wrap a column in a function
Utilisation des indexes MySQL lors du recours à une fonction dans la condition where
The quote of the day, from a MySQL performance forum: MySQL won't use an index on a column you pass through a function in the WHERE clause. So WHERE DATE(date_insert) = '2007-05-01' scans the table, while a BETWEEN range on the raw column uses the index and runs much faster.
Voici la phrase du jour ;-)
MySQL won’t/can’t use indexes where you apply a function to a column in a where condition.
Par exemple, si vous faites comme ceci, les indexes ne seront pas utilisés.
SELECT * FROM ma_table WHERE DATE(date_insert) = '2007-05-01' ;
Mieux vaut contourner le problème en faisant cela, même si il y a peut être plus élégant comme solution.
SELECT * FROM ma_table WHERE date_insert BETWEEN '2007-05-01' AND '2007-05-02' ;
Dans ce dernier cas, les indexes seront utilisés, et la requête sera beaucoup plus rapide !
Source : Forum de MySQL Performance