sql >> Database >  >> RDS >> Mysql

Traag zoeken door indexquery LIKE% MYSQL

De OR zoekwoord maakt MySQL's optimizer gek.

Je zou zoiets kunnen proberen.

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

Of u kunt overwegen FULLTEXT te zoeken. Het vereist MyISAM of een versie van MySQL 5.6 of hoger.

BEWERKEN *Het is moeilijk om precies te weten wat er aan de hand is met deze optimalisatie-dingen. Kun je dit proberen? Dit zal zien of de taalselectie je vervuilt.

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

Kun je dit proberen?

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

Het geeft geen perfect resultaat -- het heeft dubbele naamitems -- maar het slaat een DISTINCT over ontdubbelingsstap in uw zoekopdracht.

Je zou dit ook kunnen proberen.

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



  1. Foutopsporingsinformatie afdrukken vanuit de opgeslagen procedure in MySQL

  2. SQL Server-gegevens invoegen met Oracle® SQL*Loader

  3. undefined index Naam

  4. MySQL DROP-KOLOM