2015-06-02 4 views
1

У меня есть база данных, состоящая из нескольких тысяч таблиц (с 2005 года), где около 20-30% из них имеют инкрементный ряд строк около 200 тыс./Год.SQL Server Partitioning - Notation

Требование состоит в том, чтобы визуализировать статистику таблицы на основе столбца lastAccessedDate. Схема состоит в классификации в группы пассивов (10 y, 5y, 3y, 1y, 6m, 3m, 1m, 2w, currentDate). Скажем, что разделы называются p1,p2,..p10

Я могу понять, что для групп link можно определить несколько групп разбиения.

Работа выполняется каждую неделю, и поэтому схема разбиения зависит от текущей даты; т. е. через неделю p10 становится p9. Через две недели p9 становится p8 и через месяц p8 становится p7; Надеюсь, вы поняли эту идею.

  1. Возможна ли схема разбиения на основе текущей даты?
  2. Если это возможно, стоит ли горизонтально разбивать таблицы и запрашивать их вместо выполнения запроса по всей таблице? В отчетах SQL Server общее использование пространства составляет около 31 556 МБ.

Я запускаю это на экземпляре SQL Server 2008.

+0

Почему вы хотите визуализировать статистику? Определить схему разделения? Чего вы надеетесь достичь путем разбиения? читать улучшение производительности? повысить производительность записи? Для этого вам нужно создать свой раздел. Если вы не читаете или не пишете данные, основанные на упомянутых вами разделах даты, они действительно не служат никакой цели. –

+0

Текущая идея или требование подобны системе MRU, подобной системе для базы данных SQL. В этом экземпляре проекта более старые данные, по всей вероятности, будут доступны. Чтобы ускорить чтение запросов, связанных с новыми данными, я должен это сделать. – dmachop

ответ

0

Вы упомянули требования к хранению данных и статистике. Эти два не следует путать. Решения для хранения данных предназначены для быстрого доступа к данным, а статистика находится в области отчетности и визуализации.

Что касается хранения, вы должны использовать разделение, но не в предлагаемом порядке. У вас может быть 10.000 разделов на SQL-сервере, поэтому вы можете использовать one day или one week в качестве полезного ключа раздела. После создания вы можете переключать разделы внутри и вне секционированной таблицы, но вы не должны перемещать данные из существующего раздела в другой раздел, поскольку это подразумевает перерасчет всех ограничений и индексов. В представлениях вы можете создавать дополнительные значения для последующих действий «group by». Эти группы могут описывать требуемые «1d, 1w, 1m, 1q, 1y» значения отчетности.

Так что это допустимо и рекомендуется использовать перегородки для вашего случая, но иначе, чем предлагалось.

+0

Я понимаю, что это можно сделать с помощью предложения SQL Group By, но не повлияет ли инкрементный характер всей таблицы на запрос? Если данные новее, я могу запустить группу по запросу, но в случае более старых данных запрос выполняется очень медленно. Это одна из основных причин разделения данных и ускорения запроса. – dmachop

+0

Итак, вы частично на правильном пути. –

+0

Если это упражнение по настройке производительности, не просто прыгайте прямо на разметку. Вы подтвердили, что у вас закончились опции для индексов? –