Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Langsame Suche nach Indexabfrage LIKE% MYSQL

Das OR Schlüsselwort treibt den Optimierer von MySQL in den Wahnsinn.

Sie könnten so etwas versuchen.

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

Oder Sie ziehen eine VOLLTEXT-Suche in Betracht. Es erfordert MyISAM oder eine Version von MySQL 5.6 oder höher.

BEARBEITEN *Es ist schwer, genau zu wissen, was mit diesen Optimierungsdingen los ist. Kannst du das versuchen? So siehst du, ob dich die Sprachauswahl stört.

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

Können Sie das versuchen?

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

Es wird kein perfektes Ergebnis liefern – es wird doppelte Namenselemente geben – aber es wird ein DISTINCT überspringen Deduplizierungsschritt in Ihrer Abfrage.

Sie können dies auch versuchen.

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