sql >> Base de Datos >  >> RDS >> Mysql

Búsqueda lenta por consulta de índice LIKE% MYSQL

El OR la palabra clave vuelve loco al optimizador de MySQL.

Podrías intentar algo como esto.

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%'

O podría considerar la búsqueda de TEXTO COMPLETO. Requiere MyISAM o una versión de MySQL 5.6 o posterior.

EDITAR *Es difícil saber exactamente qué está pasando con estas cosas de optimización. ¿Puedes probar esto? Esto verá si la selección de idioma te está confundiendo.

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

¿Puedes probar esto?

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%'

No dará un resultado perfecto, tendrá elementos de nombre duplicados, pero omitirá un DISTINCT paso de deduplicación en su consulta.

También puedes probar esto.

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