У меня есть сайт с поиском. Запуск базы данных MySQL. Интересно, выиграет ли он в производительности от поисковика (Sphinx, Lucene и т.д.)? Как, если будет? Могу ли я использовать фасетный поиск? Я знаю, было бы лучше, если бы был текстовый поиск. Но может ли это принести пользу, если большинство запросов выглядят примерно так:
select SQL_CALC_FOUND_ROWS distinct tableA.id
from tableA as A
join tableB as B1 on A.id=B1.tablea_id
join tableB as B2 on A.id=B2.tablea_id
join tableB as B3 on A.id=B3.tablea_id
where
B1.value in ([list of ints here])
and
B2.value in ([another list of ints here])
and
B2.value in ([one more list of ints here])
order by ~A.updated_at
limit <from>,<amount>;
Идея состоит в том, чтобы искать строки в tableA
со значениями в tableB
из первого списка, затем фильтровать, чтобы оставить те, которые имеют значения в tableB
из второго списка и т. д. Сортировать их, подсчитывать все найденные и ограничивать.
tableA
и tableB
такие:
create table tableA (
id int(11) not null autoincrement,
...
updated_at timestamp not null,
primary key (`id`),
key `ix_tablea_updated_at` (`updated_at`)
) engine=InnoDB;
create table tableB (
tablea_id int(11) not null,
value int(11) not null,
key `ix_tableb_tablea_id` (`tablea_id`),
key `ix_tableb_value` (`value`)
) engine=InnoDB;
tableA
содержит ~200 тыс. строк. tableB
содержит ~1,2 млн строк. Количество B.value in ([list of ints])
отличается от запроса к запросу, как и lists of ints
.
Если я не могу получить выгоду от поисковой системы, могу ли я улучшить производительность любым другим способом?
Насколько я могу сказать, проблема в order by ~A.updated_at
и подсчете найденных строк. Есть ли способ ускорить сортировку и подсчет с помощью самого MySQL?
PS. Извините за мой английский. Надеюсь, вы меня поймете.