Подтвердить что ты не робот

Эффективность базы данных - таблица для каждого пользователя и таблица пользователей

Для веб-сайта, имеющего пользователей. Каждый пользователь имеет возможность создавать любое количество, мы будем называть его "сообщениями":

Эффективность - лучше ли создавать одну таблицу для всех сообщений, сохраняя идентификатор пользователя, создавшего сообщение, для каждого сообщения - ИЛИ создавая другую отдельную таблицу для каждого пользователя и размещения там только сообщений, созданных этим пользователем?

4b9b3361

Ответ 1

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

также:

  • Наличие нескольких таблиц означает, что вам нужно динамически создавать запросы.

  • Таблица кэшированных запросов для одной таблицы не будет использоваться для каких-либо других таблиц.

  • Наличие большого количества данных в одной таблице не сильно влияет на производительность, но имеет много таблиц.

  • Если вы хотите добавить индекс в таблицу, чтобы быстрее делать запросы, гораздо проще сделать это в одной таблице.

Ответ 2

Хорошо ответить на конкретный вопрос: с точки зрения эффективности запросов всегда будет лучше иметь небольшие таблицы, поэтому таблица на пользователя, вероятно, будет наиболее эффективной.

Однако, если у вас много сообщений и пользователей, это вряд ли имеет значение. Даже с миллионами строк вы получите хорошую производительность с хорошо размещенным индексом.

Я бы настоятельно советовал против стратегии table-per-user, потому что это добавляет много сложности вашему решению. Как бы вы запросили, когда вам нужно найти, скажем, пользователей, опубликованных по теме в течение года?

Оптимизируйте, когда вам нужно. Не потому, что вы думаете/боитесь, что что-то будет медленным. (И даже если вам нужно оптимизировать, будут более простые варианты, чем таблица за пользователя)

Ответ 3

Схемы с различным количеством таблиц, как правило, плохие. Используйте одну таблицу для своих сообщений.

Ответ 4

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

Я рекомендую вам создать единую таблицу для всех пользователей, а затем добавить индексы в эту таблицу, чтобы повысить производительность поиска. Например, вы можете добавить индекс в столбец user, чтобы вы могли быстро найти все сообщения для данного пользователя. Вы также можете рассмотреть возможность добавления других индексов в зависимости от требований вашего приложения.

Ответ 5

Ваше первое предложение о наличии единственной user и одной таблицы post - это стандартный подход.

В настоящий момент сообщения могут быть единственной пользовательской функцией на вашем сайте, но представьте, что в будущем может потребоваться поддержка для пользователей, имеющих сообщения, предпочтения и т.д. Теперь ваш отдельный подход к каждому пользователю к взрыву в количестве таблиц, которые вам нужно создать.