Где должен находиться столбец разделения в первичном ключе на SQL Server? - PullRequest
1 голос
/ 17 марта 2010

Использование SQL Server 2005 и 2008.

У меня есть потенциально очень большая таблица (потенциально сотни миллионов строк), состоящая из следующих столбцов:

CREATE TABLE (
    date SMALLDATETIME,
    id BIGINT,
    value FLOAT
)

, который разбивается на столбец date в ежедневных разделах. Тогда возникает вопрос: должен ли первичный ключ быть на date, id или value, id?

?

Я могу себе представить, что SQL Server достаточно умен, чтобы знать, что он уже разбивается на date, и поэтому, если я всегда запрашиваю целые куски дней, я могу иметь его вторым в первичном ключе. Или я могу представить, что для SQL Server этот столбец должен быть первым в первичном ключе, чтобы получить выгоду от разделения.

Кто-нибудь может дать некоторое представление о том, каким образом должна быть введена таблица?

Ответы [ 2 ]

1 голос
/ 17 марта 2010

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

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

1 голос
/ 17 марта 2010

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

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

Для получения полной информации, обратитесь к справке Секционированные таблицы и индексы в SQL Server 2005

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...