Каков наиболее масштабируемый дизайн для этой структуры таблицы? - PullRequest
3 голосов
/ 12 мая 2011
DataColumn, DataColumn, DateColumn

Время от времени мы помещаем данные в таблицу по дате.

Так что сначала все кажется великолепным, но потом я подумал: что происходит, когда в таблице миллионы или миллиард строк? Должен ли я разбивать таблицы по дате? Таким образом, производительность запроса никогда не снизится? Как люди справляются с подобными вещами?

Ответы [ 6 ]

3 голосов
/ 12 мая 2011

Вы можете использовать многораздельные таблицы, начинающиеся с SQL 2K5: Многораздельные таблицы

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

2 голосов
/ 12 мая 2011

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

Обновление

Немного более глубокое объяснение.Предположим, у вас есть таблица с миллионом записей.Если у вас [DateColumn] разные даты, вашим лучшим союзником будут индексы, которые работают с [DateColumn].Затем вы убедитесь, что ваши запросы всегда фильтруются по крайней мере [DateColumn].

Таким образом, вы будете в порядке.

0 голосов
/ 12 мая 2011

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

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

Если вы этого не сделаете, логика вашей программы сойдет с ума и в конечном итоге замедлит работу вашей системы.

Будьте проще.

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

0 голосов
/ 12 мая 2011

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

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

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

Возможно, вам понадобится рассмотреть тоже следующее: в SQL Server 2005 связанные таблицы (такие как Order и Таблицы OrderDetails), которые разделены на то же разделение ключ и та же функция разделения Говорят, что выровнены. Когда Оптимизатор обнаруживает, что два раздела и выровненные таблицы объединяются, SQL Server 2005 может объединять данные, которые сначала располагается на одних и тех же разделах а затем объединить результаты. это позволяет SQL Server 2005 больше эффективно использовать многопроцессорность компьютеры.


Подробнее о Секционированные таблицы и индексы в SQL Server 2005

0 голосов
/ 12 мая 2011

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

0 голосов
/ 12 мая 2011

Это легко можно квалифицировать как преждевременную оптимизацию, чего трудно достичь при проектировании БД, ИМХО, потому что оптимизация находится / должна быть ближе к поверхности при моделировании данных.

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

...