SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.12.2009 21:02:54

valrond
Участник
Зарегистрирован: 06.12.2009
Сообщений: 1

объединение таблиц через индексы или одна общая таблица

Доброго времени. Я самоучка и столкнулся с такой проблемой.
Есть несколько таблиц:


subj
id name
1 табуретка
2 стол
3 стул
4 кресло
и т.д. приблизительно 80 тыс строк.



desc
id text
1 трехногая
2 четырехногая
3 квадратый
4 круглый
и т.д. приблизительно 1,5 млн строк.



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 смотрел, все хорошо.

Неактивен

 

#2 06.12.2009 23:51:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: объединение таблиц через индексы или одна общая таблица

Нормализация не всегда ведет к улучшению производительности.
Посмотрите тему http://sqlinfo.ru/forum/viewtopic.php?id=209

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson