sql >> Databáze >  >> RDS >> Mysql

Pomalé vyhledávání podle indexového dotazu LIKE% MYSQL

OR klíčové slovo přivádí optimalizátor MySQL k šílenství.

Můžete zkusit něco takového.

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

Nebo můžete zvážit FULLTEXTOVÉ vyhledávání. Vyžaduje MyISAM nebo verzi MySQL 5.6 nebo novější.

UPRAVIT *Je těžké přesně vědět, co se s těmito optimalizačními věcmi děje. Můžete to zkusit? Uvidíte, zda vás výběr jazyka nezatěžuje.

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

Můžete to zkusit?

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

Neposkytne dokonalý výsledek – bude mít duplicitní položky s názvy – ale přeskočí DISTINCT krok deduplikace ve vašem dotazu.

Můžete také zkusit toto.

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



  1. JDBC ResultSet getDate ztrácí přesnost

  2. Proč byste neměli používat mysql_fetch_assoc více než jednou?

  3. Vytvořte databázi SQL Server pomocí Azure Data Studio

  4. Kdy se doporučuje používat MySQL BLOB?