sql >> Databasteknik >  >> RDS >> Mysql

Långsam sökning efter indexfråga LIKE% MYSQL

OR sökord gör MySQL:s optimerare till vansinne.

Du kan prova något liknande.

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

Eller så kan du överväga att söka i FULLTEXT. Det kräver MyISAM eller en version av MySQL 5.6 eller senare.

REDIGERA *Det är svårt att veta exakt vad som händer med dessa optimeringssaker. Kan du prova detta? Detta kommer att se om språkvalet stör dig.

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

Kan du prova detta?

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

Det kommer inte att ge ett perfekt resultat -- det kommer att ha dubbletter av namnobjekt -- men det kommer att hoppa över en DISTINCT dedupliceringssteg i din fråga.

Du kan också prova detta.

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



  1. Hur tvingar man fram pascal-fall med Oracles Entity Framework-stöd?

  2. SQL Server Tutorial – Allt du behöver för att bemästra Transact-SQL

  3. Hur man hittar alla beroenden för en tabell i sql-servern

  4. Datatrunkering:Felaktigt datetime-värde:''