Мой вопрос о выборе наилучшего метода для выполнения задания. я представлю цель и различные решения.mysql views performance vs extra column
У меня есть список предметов и список категорий. каждый из них может принадлежать нескольким категориям.
items (id, name, ...other fields...)
categories (id, name, ......)
category_items (category_id, item_id)
список предметов очень большой и обновляется каждые 10 минут (с использованием cron). список категорий фиксирован.
на моей странице, я показываю большой список предметов, и у меня есть фильтры категорий. вся фильтрация выполняется на javascript на стороне клиента. Причина в том, что доступные в настоящее время элементы ограничены + 1000, поэтому все данные (элементы + категории) будут загружаться вместе.
Эта страница собирается быть просмотрена много раз, поэтому производительность является проблемой здесь. У меня есть несколько идей, которые приведут к хорошей производительности. во всех из них будет отправлен полный список категорий. пункты, однако ...
запуск одного выбора с использованием join и group_concat. что-то вроде этого:.
ВЫБРАТЬ I *, GROUP_CONCAT (. CI
category_id
Сепаратор "") КАК category_list ИЗitems
КАК я LEFT JOINcategory_items
AS КЕ на (CIitem_id
= яid
.). ГДЕ ... ГРУППА BY i.id
ORDER BY ...создания представления с выше
- хранения результата GROUP_CONCAT в качестве дополнительного столбца. это будет обновляться каждые несколько минут в режиме cron.
индексация выполнена правильно, поэтому все методы будут работать относительно быстро. join - тяжелая операция, поэтому мой вопрос о (2), (3):
- это обновление, обновленное только на каждом CRUD, или оно рассчитано на каждый выбор? если он обновляется только на CRUD, он должен быть примерно таким же, как и хранение столбца.
Помните, что таблица элементов будет расти, и будут выбраны только последние строки.
Это зависит - вам придется проверять себя, со временем по мере увеличения количества строк. –