Каков наиболее масштабируемый дизайн для этой структуры таблицы

DataColumn, DataColumn, DateColumn 

Каждый так часто мы помещаем данные в таблицу по дате.

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

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

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

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

Обновить

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

Таким образом, все будет хорошо.

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

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

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

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

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

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

Будь проще.

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

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

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

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

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


Ознакомьтесь с разделенными таблицами и индексами в SQL Server 2005

Interesting Posts

Создавать базу данных sql-сервера программно во время выполнения

Развертывание SQL Express на многопользовательском режиме?

SSIS "merge join -> условное разделение -> Вставка / обновление" vs "разделение Вставка и обновление в двух потоках данных"?

Лучшая практика хранения исторических данных в SQL (для использования CASS Cube)

Как вернуть все записи, если параметр равен нулю

Ошибка базы данных: в позиции 0 нет строки

запрос выполняется слишком много времени

Как создать систему уведомлений при использовании гибридных баз данных

Временные расширения для SQL Server

COUNT DISTINCT (столбец) замедляет запрос 20X

Ошибка SQL Неверный синтаксис рядом с ключевым словом «пользователь»

Проверьте, находится ли dbgeometry dbgeometry / dbgeography в пределах многоугольника

UPDATE + WITH (ROWLOCK) + CTE

Свернуть строки для двух столбцов

Стратегии подкачки в хранимой процедуре (просмотр или?)

Давайте будем гением компьютера.