Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pesquisa lenta por consulta de índice LIKE% MYSQL


O OR palavra-chave enlouquece o otimizador do MySQL.

Você pode tentar algo assim.
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 você pode considerar a pesquisa FULLTEXT. Requer MyISAM ou uma versão do MySQL 5.6 ou posterior.

EDITAR *É difícil saber exatamente o que está acontecendo com essas coisas de otimização. Você pode tentar isso? Isso vai ver se a seleção de idioma está atrapalhando você.
 SELECT name 
   FROM table 
  WHERE (name LIKE 'myname%' OR enam LIKE 'myname%')

Você pode tentar isso?
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%'

Não dará um resultado perfeito -- terá itens de nome duplicados -- mas pulará um DISTINCT etapa de desduplicação em sua consulta.

Você também pode tentar isso.
SELECT name 
  FROM table
 WHERE lang_index='en'
   AND id IN (
    SELECT id from table 
     WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))