Slow search by index query LIKE% MYSQL

后端 未结 1 1332
南方客
南方客 2021-01-18 17:40

i have table with 100 000 000 rows so large. Structure of table

id         int          INDEX(not primary not unique just index)
lang_index varchar(5)   INDE         


        
相关标签:
1条回答
  • 2021-01-18 18:25

    The OR keyword drives MySQL's optimizer crazy.

    You might try something like this.

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

    Or you might consider FULLTEXT searching if you can (if your table has MyISAM for access).

    EDIT* It's hard to know exactly what's going on with these optimization things. Can you try this? This will see whether the language selection is fouling you up.

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

    Can you try this?

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

    It won't give a perfect result -- it will have duplicate name items -- but it will skip a DISTINCT deduplicating step in your query.

    You might also try this.

    SELECT name 
      FROM table
     WHERE lang_index='en'
       AND id IN (
        SELECT id from table 
         WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))
    
    0 讨论(0)
提交回复
热议问题