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