Я довольно плохо знаком с дизайном и архитектурой баз данных SQL.Я создаю таблицу для хранения ежедневных файлов моментальных снимков за 6 месяцев из моей исходной системы.С помощью этого сценария можно создать усеченную версию таблицы данных:
CREATE TABLE AccountHist
(
EffectiveDate datetime not null,
AccountNumber bigint not null,
Balance float not null,
Status char(3) not null,
IntRate real not null,
etc......
)
EffectiveDate и AccountNumber вместе являются уникальными и никогда не должны дублироваться, поэтому я хочу добавить ограничение PK в таблицу, но яЯ не могу понять, должен ли он быть CLUSTERED или NONCLUSETERD:
CONSTRAINT PK_AcctEffDate PRIMARY KEY (?) (EffectiveDate, AccountNumber)
У меня есть понимание по определению различий между кластерными и некластеризованными индексами.Я чувствую, что должен использовать кластеризацию, потому что, ну, это то, что я считаю наиболее распространенным, но также имеет смысл сортировать данные по EffectiveDate.
Меня сбивает с толку то, что я думаю, что мне также нужнонекластеризованные индексы для EffectiveDate и AccountNumber.Вот два общих запроса, которые я ожидаю выполнить:
select AccountNumber, Balance from AccountHist
where EffectiveDate = (select max(EffectiveDate) from AccountHist)
and Status = 'ACT'
и
select EffectiveDate, Avg(IntRate) AvgRate from AccountHist
where EffectiveDate >= '01/01/2019' and EffectiveDate < '02/01/2019'
group by EffectiveDate
Это сводится к трем основным вопросам: 1. Могу ли я создать отдельные индексы для 2 столбцов, которые такжесделать мой ПК?Если так, что должно быть кластеризовано против некластеризованного?2. Должен ли я использовать суррогатный ключ?3. Какая настройка даст наилучшую производительность при запросах и загрузке данных?
Спасибо.