Какое решение является лучшим в отношении времени запроса выбора?

#mysql #query-optimization

#mysql #оптимизация запросов

Вопрос:

Мне было интересно, какое лучшее решение для этой проблемы :

У меня есть статьи, и у меня есть категории, статья относится к категории. Существует два типа категорий, определяемых пользователем и определяемых системой (например, «входящие», «корзина» и т. Д.)

Итак, вопрос в том, должен ли у меня быть только один элемент для каждой категории, определенной системой, и все статьи всех пользователей будут привязаны к этим категориям, или я должен создать все категории, определенные системой, при создании пользователя, и прикрепить эти категории к пользователю?

Первое решение приведет к большому количеству статей в каждой категории, определенной системой, а второе решение приведет к большому количеству «избыточных» элементов в категории. Какое решение является лучшим?

Ответ №1:

Это ваш выбор. Оба подхода имеют свои плюсы и минусы. Если вы выберете первое решение, ваш оператор select будет содержать WHERE предложение, подобное этому:

 WHERE (category.type = 'SYSTEM' OR category.user_id = :USER_ID)
  

Второе решение упростит ваши инструкции select:

 WHERE category.user_id = :USER_ID
  

Второе решение усложнит добавление пользователя. Вам необходимо создать системные категории для пользователя:

 INSERT INTO CATEGORY (user_id, category_name, ...)  SELECT :USER_ID, system_category, ... FROM SYSTEM CATEGORY;
  

И если вы добавляете новую системную категорию, вам нужно вставить ее для всех пользователей.