Mysql
 sql >> Base de données >  >> RDS >> Mysql

Recherche lente par requête d'index LIKE% MYSQL

Le OR mot-clé rend fou l'optimiseur de MySQL.

Vous pourriez essayer quelque chose comme ça.

SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'

Ou vous pourriez envisager une recherche FULLTEXT. Il nécessite MyISAM ou une version de MySQL 5.6 ou ultérieure.

MODIFIER * Il est difficile de savoir exactement ce qui se passe avec ces choses d'optimisation. Pouvez-vous essayer ceci? Cela permettra de voir si la sélection de la langue vous dérange.

 SELECT name 
   FROM table 
  WHERE (name LIKE 'myname%' OR enam LIKE 'myname%')

Pouvez-vous essayer ?

SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION ALL
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'

Il ne donnera pas un résultat parfait - il aura des éléments de nom en double - mais il sautera un DISTINCT étape de déduplication dans votre requête.

Vous pouvez également essayer ceci.

SELECT name 
  FROM table
 WHERE lang_index='en'
   AND id IN (
    SELECT id from table 
     WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))