Загрузка сервера: функции MySQL против PHP
Вот моя ситуация:
Ситуация:
У меня есть пользователи, и у меня есть несколько значений в нескольких категориях для каждого пользователя.
У меня есть два варианта:
I. Создайте новую таблицу "Значения":
user_ID category value
... ... ...
5 1 aaa
5 1 bbb
5 2 ccc
5 2 ddd
5 2 eee
6 1 xxx
6 2 yyy
6 1 zzz
II. В моей реальной таблице с пользователями - "пользователи":
user_ID (unique) values
5 aaa,bbb$$ccc,ddd,eee
6 xxx,zzz$$yyy
... где я сохраняю значения в виде текста и анализирую их с помощью разделительных категорий ',' и '$$'.
До сих пор я занимался некоторыми мелочами вторым способом, но теперь я ожидаю много значений и категорий для этой базы данных, и мне интересно, что даст мне меньшую нагрузку на сервер - имея очень большую таблицу базы данных MySQL и пройдусь по ней на каждой странице, чтобы увидеть, какие значения принадлежат текущему пользователю; или получить все и только его значения из сравнительно небольшой таблицы, но каждый раз анализировать строку с помощью PHP, чтобы сделать ее пригодной для использования?
2 ответа
Первый способ - это то, для чего строится реляционная база данных. У вас также есть дополнительное преимущество индексов, которое позволит ускорить его даже при довольно большом наборе данных.
Кроме того, он позволяет запрашивать данные с другого направления - выбрать всех пользователей с категорией 2, равной 'eee'
Вставка неизвестного количества данных в поле - очень плохая идея, так как вы не знаете, как измерить их в первую очередь. Более того, ваша БД не сможет проиндексировать ее любым полезным способом, и производительность будет падать по мере роста системы.
Размещение категорий и значений в отдельной таблице хорошо масштабируется, и, как уже сказал Адам, это и есть реляционная БД.
Возможно, вы захотите Google "нормализация базы данных" и просмотреть некоторые результаты для получения дополнительной информации.