2013-10-15 2 views
1

У меня есть простой таблицы в SQL Server, глядя, как это:Запрос данных из таблицы с более чем один миллиард строк

id | Date | Value 

У меня есть кластерный индекс Date, некластеризованный индекс id.

В таблице содержится более одного миллиарда строк.

создать простой запрос, который, кажется, как это:

select * from table 
where id = x 
and date >= date1 and date < date2 

Вопрос: почему он принимает только менее чем один или максимум 3 секунды, чтобы найти данные, когда я использую, например date1 01 sept 2013 и date2 14 oct 2013, но если я меняю дату1 на 01 oct 2013, она занимает более 50 секунд, и если я возьму 01 jan 2013, она снова займет меньше 3 секунд?

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

ответ

1

У меня был бы указатель на оба (id, date). просто или или не принесет вам пользы. Вам нужно оба в одном индексе. Не сгруппированы ... ваш индекс, который у вас уже есть по ID, просто создайте его как (ID, Date)

+0

Спасибо, я обсужу это с моей командой, потому что обновление таблицы займет некоторое время –

Смежные вопросы