Mysql
 sql >> Database >  >> RDS >> Mysql

Ricerca lenta per query di indice COME% MYSQL

Il OR parola chiave fa impazzire l'ottimizzatore di MySQL.

Potresti provare qualcosa del genere.

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

Oppure potresti prendere in considerazione la ricerca FULLTEXT. Richiede MyISAM o una versione di MySQL 5.6 o successiva.

MODIFICA *È difficile sapere esattamente cosa sta succedendo con queste cose di ottimizzazione. Puoi provare questo? Questo vedrà se la selezione della lingua ti sta rovinando.

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

Puoi provare questo?

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

Non darà un risultato perfetto -- avrà elementi di nome duplicati -- ma salterà un DISTINCT passaggio di deduplicazione nella tua query.

Potresti anche provare questo.

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