Как грамотно составить MySQL запрос?

Рейтинг: 2Ответов: 1Опубликовано: 23.01.2015

Добрый день!

Никак не могу понять, как лучше бы составить запрос. Есть у меня таблица такого вида:


|id | uid | referer |
| 1 |  2  | site.ru |
| 2 |  2  | my.ru/xxx |
| 3 |  2  | my.ru/yyy |
| 4 |  3  | xxx.ru |
| 5 |  4  | site.ru |
| 6 |  4  | my.ru |

Мне нужно выбрать все записи, uid которых пришли с сайта site.ru, т.е. должны выбраться строки с ID = 1,2,3,5,6.

Делал вложенный запрос такого вида:

SELECT * FROM tbl WHERE uid IN(SELECT uid FROM tbla WHERE referer LIKE "%site.ru%")

Но т.к. в таблице почти 2 млн записей, то такой запрос и за час не выполняется.
Индексами являются id и uid.

Подскажите, как можно более грамотно оптимизировать запрос? Спасибо!

Ответы

▲ 1
  1. Можно у поля referer сделать индекс, и зная что все referer начинаются одинаково искать используя индекс SELECT uid FROM tbla WHERE referer LIKE "site.ru%" . Если поисковое слово в %% то индекс не используется.
  2. Используйте полнотекстовый поиск. Если у вас движок MyISAM то создайте полнотекстовый индекс для поля referer и SELECT uid FROMtblaWHERE MATCH(referer) AGAINST('site.ru')