Моя компания переходит на SQL Server 2008 R2. У нас есть таблица с тоннами архивных данных. Большинство запросов, использующих эту таблицу, используют значение DateTime в инструкции where. Например:
Запрос 1
SELECT COUNT(*)
FROM TableA
WHERE
CreatedDate > '1/5/2010'
and CreatedDate < '6/20/2010'
Я предполагаю, что разделы создаются на CreatedDate, и каждый раздел распределен по нескольким дискам, у нас 8 процессоров, а в базе данных 500 миллионов записей, которые равномерно распределены по датам с 01.01.2008. по 24.02.2011 (38 разделов). Эти данные также могут быть разделены на кварталы в год или другие периоды времени, но давайте оставим предположения до месяцев.
В этом случае я полагаю, что будут задействованы 8 процессоров, и только 6 разделов будут опрошены для дат между 05.01.2010 и 20.06.2010.
Что, если бы я выполнил следующий запрос и мои предположения остались бы такими же, как указано выше.
Запрос 2
SELECT COUNT(*)
FROM TableA
WHERE State = 'Colorado'
Вопросы?
1. Будут ли опрошены все разделы? да
2. Все ли 8 ЦП будут использоваться для выполнения запроса? да
3. Будет ли производительность лучше, чем запрос к таблице, которая не разделена на разделы? да
4. Что еще мне не хватает?
5. Как может помочь индекс раздела?
Я отвечаю на первые 3 вопроса выше, основываясь на моих ограниченных знаниях о секционированных таблицах и параллелизме SQL Server 2008. Но если мои ответы неверны, можете ли вы сообщить, почему я ошибаюсь.
Ресурс:
Обновление У нас есть кластерный индекс в БД и индексы покрытия по столбцам
BarDev