|
|
|
| Задача. Есть каталог товаров с кучей разных подразделов.
Один и тот же объект нужно показывать в списке в одном или нескольких разделах каталога
Что будет работать быстрее и грузить сервак меньше?
1) создание дополнительной таблицы, где будут содержаться связи объекта и нужных разделов, и затем выборка по двум таблицам.
Что-то типа:
SELECT * FROM Table1 as a, Table2 as b WHERE a.ObjectID=b.ObjectID GROUP BY a.ObjectID
2) запись в определенное поле списка ID всех разделов, и затем выборка
Например:
SELECT * FROM Table1 WHERE FIND_IN_SET('$id',Subcategories)>0
3) Может быть, третий и далее варианты?
Пользовался первым способом (когда-то cheops и посоветовал), но в силу специфики CMS мне в общем-то удобнее хранить в одной таблице. А если будет много записей (допустим, полмиллиона)? | |
|
|
|
|
|
|
|
для: Ivan
(29.02.2008 в 06:28)
| | Лучше все храить в одной таблице и обращаться по идентификаторам | |
|
|
|
|
|
|
|
для: ONYX
(29.02.2008 в 08:40)
| | Не понял вашего ответа. Видимо, вопрос неточен.
Попробую поставить его иначе:
С помощью какой конструкции будет быстрее всего извлекать подстроку из данных, хранящихся в определенном столбце?
В первом посте в примере я использовал FIND_IN_SET
Т.е. я записываю в столбец Column строку из чисел: 1,2,5,7,89,45
Потом извлекаю нужные строки по условию WHERE FIND_IN_SET('5',Column)>0
Это работает, но, возможно, будет поудачнее вариант в плане оптимизации? | |
|
|
|
|
|
|
|
для: Ivan
(29.02.2008 в 06:28)
| | Лучше всё-таки отдельную таблицу завести и удобнее и простор для оптимизации имеется (всегда можно добавить индексы по столбцам). | |
|
|
|
|
|
|
|
для: cheops
(02.03.2008 в 13:50)
| | Провел первые полевые испытания.
Пока показывает, что выборка из одной таблицы быстрее (записей мало).
Надо накачать еще записей поболее.. | |
|
|
|