Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени. Я самоучка и столкнулся с такой проблемой.
Есть несколько таблиц:
1я
subj
id name
1 табуретка
2 стол
3 стул
4 кресло
и т.д. приблизительно 80 тыс строк.
2я
desc
id text
1 трехногая
2 четырехногая
3 квадратый
4 круглый
и т.д. приблизительно 1,5 млн строк.
3я
color
id col
1 красный
2 синий
3 зеленый
и т.д. приблизительно 100 строк
и 4я - общая
sum
id subj_id desc_id color_id
1 1 1 2
2 1 1 3
3 2 4 2
и т.д. приблизительно 1,5 млн строк.
Проблема состоит в организации поиска.
Поле id в каждой из таблиц - primary index. Допустим ищем по имени. Сделал для таблицы subj индекс fulltext для столбца name для сортировки по релевантности. Вывести в таблицу надо все: и имя, и описание, и цвет.
Я использовал 2 типа запросов 1 - через join , 2 - объединение через запятую с пом where.
1-
SELECT
MATCH (subj.name) AGAINST ('стол') as val,
subj.name,
desc.text,
color.col
from
subj,
desc,
color
where
subj.name like '%стол%',
sum.subj_id=subj.id,
sum.desc_id=desc.id,
sum.color_id=color.id
2-
SELECT
MATCH (subj.name) AGAINST ('стол') as val,
subj.name,
desc.text,
color.col
from
sum
LEFT JOIN subj ON sum.subj_id=subj.id
LEFT JOIN desc ON sum.desc_id=desc.id
LEFT JOIN color ON sum.color_id=color.id
where
subj.name like '%стол%'
Оба запроса выполняются примерно 23 секунды....((((
Я создал таблицу, по типу sum, но заменил в них индексы на значения.
id subj_id desc_id color_id
1 табуретка трехногая синяя
2 табуретка трехногая красная
и т.д.
По ней поиск идет быстро примерно 1 сек. Но таблица большая и в ней высокая избыточность.
Как правильно поступить в этой ситуации? что правильно? Как ускорить выполнение запроса не создавая эту таблицу?
Индексы верные, через explain смотрел, все хорошо.
Неактивен
Нормализация не всегда ведет к улучшению производительности.
Посмотрите тему http://sqlinfo.ru/forum/viewtopic.php?id=209
Неактивен