Дизайн базы данных: одна огромная таблица или отдельные таблицы? - PullRequest
24 голосов
/ 04 мая 2010

В настоящее время я разрабатываю базу данных для использования в нашей компании. Мы используем SQL Server 2008. База данных будет содержать данные, полученные от нескольких клиентов. Целью базы данных является получение совокупных показателей производительности для нескольких клиентов.

В последнее время меня беспокоит тот факт, что одна таблица, в частности, будет становиться очень большой. Каждый клиент имеет приблизительно 20 000 000 строк данных, и вскоре в базе данных будет 30 клиентов (если не больше). Много запросов будет сделано по этой таблице. Я уже замечаю проблемы с производительностью, и пользователи временно заблокированы.

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


Обновление : Прошло около полугода с тех пор, как мы впервые создали таблицы. Следуя приведенным ниже советам, я создал несколько огромных таблиц. С тех пор я экспериментировал с индексами и принял решение о кластеризованном индексе для первых двух столбцов (код больницы и код отделения), по которым мы бы разбили таблицу, если бы у нас была Enterprise Edition. До недавнего времени эта установка работала нормально, как и предсказывал Галвегиан, проблемы с производительностью возникают. Перестройка индекса занимает много времени, пользователи блокируют друг друга, запросы часто занимают больше времени, чем нужно, и для большинства запросов стоит сначала скопировать соответствующую часть данных во временную таблицу, создать индексы для временной таблицы и запустить запрос. Это не так, как должно быть. Поэтому мы рассматриваем возможность покупки Enterprise Edition для использования секционированных таблиц. Если покупка не может пройти, я планирую использовать обходной путь для выполнения разбиения в Standard Edition .

Ответы [ 13 ]

0 голосов
/ 04 мая 2010

Сохраняйте одну таблицу - 20M строк невелики, и клиенты - это не совсем та таблица, которую вы легко можете «заархивировать», а поиск по нескольким таблицам, чтобы найти клиента, не стоит усилий (SQL, вероятно, будет намного более эффективным при поиске BTree, чем ваше собственное изобретение)

Однако вам необходимо изучить проблемы с производительностью и блокировками - это предотвратит масштабирование вашей базы данных.

0 голосов
/ 04 мая 2010

Если вы работаете на сервере MS SQL и хотите сохранить одну таблицу, разделение таблицы может быть одним из решений.

0 голосов
/ 04 мая 2010

Одна таблица, а потом беспокоиться о производительности. То есть, если вы собираете одинаковую информацию для каждого клиента. Таким образом, если вам нужно добавить / удалить / изменить столбец, вы делаете это только в одном месте.

...