Работа с графом и производительность

jenia

Новичок
Работа с графом и производительность

Вот немогу никак решить возникшую задачу.
Есть граф, который хранится в mysql. Структура такова: таблица товаров, таблица связей, таблица производителей.
Когда выводится информация о товаре, используется только одно поле из таблицы производителей (имя производителя). Остальные поля этой таблицы используются только если пользователь просматривает информацию о конкретном производителе.
Если имя производителя занести в таблицу связей и когда показывается информация о товаре использовать это поле, вместо того чтобы лезть в таблицу производителей это будет более оптимально в плане производительности?
Я знаю, что это неправильно с точки зрения построения баз данных (избыточность данных возникает), но можно услышать минусы такого подхода (и плюсы, если они есть)?
 

Wicked

Новичок
Есть граф, который хранится в mysql. Структура такова: таблица товаров, таблица связей, таблица производителей.
Понятием "граф" ты все усложняешь. Это называется "отношение многие ко многим".
Когда выводится информация о товаре, используется только одно поле из таблицы производителей (имя производителя). Остальные поля этой таблицы используются только если пользователь просматривает информацию о конкретном производителе.
Вот и доставай только название из той таблицы.

Если имя производителя занести в таблицу связей и когда показывается информация о товаре использовать это поле, вместо того чтобы лезть в таблицу производителей это будет более оптимально в плане производительности?
чуть-чуть, но твой же следующий пункт гораздо важнее:
Я знаю, что это неправильно с точки зрения построения баз данных (избыточность данных возникает)
-~{}~ 06.10.06 10:25:

PS: а что, уже тормозит? :)
 

jenia

Новичок
Нет, не тормозит пока что.
Просто для вывода информации приходится работать с двумя "отношениями многих ко многим" (одно для вывода группы товара, второе для вывода производителя). Получается, что для отображения странички нужно сделать семь запросов к базе. Пять из них простые (типа SELECT * FROM tbl WHERE ...), а два более сложные (для работы с "отношениями многих ко многим").
Вот и возникает вопрос: а не много ли запросов? На средненьком хостинге это не приведёт к перегрузке mysql?
Но наверное ты всё таки прав: если производительность увеличивается чуть-чуть, то оно того не стоит.
 

Wicked

Новичок
Вот и возникает вопрос: а не много ли запросов?
даже и не знаю, как тебе ответить :) Все зависит от суммарной нагрузки. Если эти запросы выполняются по 30 секунд каждый, или если у тебя сто-тыщ-мильонов посещений в день, то даже 1 запрос - это много.

Конкретно про твоих 2 "более сложных" запроса могу сказать, что составляющая связи многие-ко-многим обычно оптимизируется стандартным способом. В таблицы связей добавляются 2 двойных индекса - (id1, id2) и (id2, id1).
 

jenia

Новичок
Я всё это знаю. Сейчас работает быстро. При шести запросах нагрузка на mysql ещё не разу не превышала минимальной. Поэтому я думаю всё будет в порядке. Спасибо за помощь.
 
Сверху