Эффективность базы данных - таблица на пользователя против таблицы пользователей - PullRequest
23 голосов
/ 25 сентября 2011

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

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

Ответы [ 5 ]

29 голосов
/ 25 сентября 2011

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

Также:

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

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

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

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

10 голосов
/ 25 сентября 2011

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

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

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

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

5 голосов
/ 25 сентября 2011

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

4 голосов
/ 25 сентября 2011

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

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

4 голосов
/ 25 сентября 2011

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

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

...