В моей базе данных есть несколько очень больших таблиц, но значительная часть этих данных «старая».
Из-за обстоятельств, не зависящих от меня, я не могу удалить эти «старые» данные. Другое ограничение заключается в том, что я не могу изменить базу данных, то есть добавить в нее файловые группы. Как сейчас обстоят дела, все находится в PRIMARY
файловой группе.
Я думал разбить эти таблицы на несколько разделов, таких как «новый», «старый», «заархивированный» и тому подобное. У меня есть столбец «статус», который я хотел бы использовать для этой цели.
Учитывая описанный сценарий и ограничения, мне было интересно, имеет ли смысл разделение здесь. Другими словами, если моя таблица разделена таким образом, но все разделы находятся в одной файловой группе, SQL Server будет достаточно умен, чтобы найти эту специальную область в базовом файле, где находятся мои «новые» данные, и не коснуться область со "старыми" данными?
Иными словами, если, скажем, 80% моих данных «старые». Есть ли в SQL Server механизм, позволяющий избежать доступа к 100% базовых файлов и доступа только к 20%, которые содержат «новые» данные (при условии, конечно, что в WHERE
разделе запросов я указываю свой столбец разбиения ).
Я думаю, чтобы ответить на это, нужно было бы понять, как разделение реализовано внутри. Я ценю любые указатели.
источник
Ответ "да". У него есть механизм для любого запроса, который фильтрует входные данные на основе логики, используемой для определения разделов.
Вы должны иметь соответствующий фильтр, или все разделы будут сканироваться. Обычно это предполагает наличие фильтров даты (в вашем случае) для выбора раздела.
Один из способов обеспечить это - иметь представления, которые обращаются только к одному разделу с правильной логикой в представлении.
источник