Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 секционировать по дипазону  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1931
2005 сервер

никак не въеду, как такое сделать

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

есть в этой таблице также поле типа int (totaltime), что есть как бы продолжительность жизни записи в секундах.

Бизнес задача состоит в том, чтобы отобрать записи по условию:

[datetime] <= @datetimeto AND [datetime]>=DATEADD(ss,-[totaltime],@datetimefrom)

как поступить в этом случае? Как переделать схему секционирования таким образом, чтобы верхняя граница была [datetime], а нижняя DATEADD(ss,[totaltime],[datetime])?

вычисляемое поле не годится, как вы понимаете.
16 июн 09, 15:55    [7305830]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
Alexes
Member

Откуда:
Сообщений: 1100
Shurgenz,
У вас у всех записей, которые сейчас находятся в одной секции, одинаковое значение totaltime?
16 июн 09, 16:02    [7305872]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1931
нет конечно, это время жизни записи... может быть любым потенциально....
16 июн 09, 16:03    [7305879]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36807
Ну, материализуйте вы ваше время жизни записи в дату, зачем его каждый раз вычислять?
16 июн 09, 16:06    [7305896]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Секционированные таблицы и индексы
Секционированные таблицы и индексы SQL Server 2005
16 июн 09, 16:09    [7305914]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1931
если я его материализую, скажем, будет еще поле типа datetime_whole_time, равное DATEADD(ss,totaltime,datetime)

что в приципе возможно, как это поможет в задаче секционирования?

в этом случае у меня будут 2 поля datetime_whole_time и datetime, и в запросах они будут фигурировать как

select * from ptable where datetime_whole_time>=@datetimefrom and dateime<@datetimeto.

А секционировать по правилам я могу только по одному полю
16 июн 09, 16:11    [7305923]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Shurgenz
это как минимум позволит нормально использовать индексы при выборке данных, и вполне возможно надобность в секционировании отпадет.

для спящего время бодрствования равносильно сну
16 июн 09, 16:14    [7305950]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
iljy
Guest
Shurgenz

А секционировать по правилам я могу только по одному полю

причем с фиксированными границами секций;) вы подумайте о самой постановке вопроса хорошенько - какой размер должен быть у вашей секции? Так что есть резон подумать над предложениями Гавриленко Сергея Алексеевича и Алексея2003.
16 июн 09, 16:16    [7305968]     Ответить | Цитировать Сообщить модератору
 Re: секционировать по дипазону  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Нифига не понял.
1. В чём проблема и причём к ней секционирование?
2. Нафига "материализованная" дата "datetimeto", когда даже не факт, что представленный запрос есть повально используемый, да и индекс никак в таком запросе не поможет (неравенство ведь). Да и не по делу эта "материализация".

totaltime может быть абсолютно любым (хоть тысчу лет), поэтому запись может быть в любой "секции" и перекрывать все остальные вместе взятые записи.
А вот если totaltime может быть не более чем константа @X, где @X несравнимо меньше, так называемой вами "секции" (шмесяц), то можно написать, что-то типа:
    Date <= @DateTo
AND Date > DateAdd(Second,-@X,@DateFrom)
AND ... Date > DateAdd(Second,-Duration,@DateFrom)
Тогда перебор в индексе (или в вашем, непонятным для чего, секционировании) будет реально ограничен.

Ну вот, полезло быдлокодерство, и не феншуйно, и ни кошерно. :)
17 июн 09, 01:12    [7307910]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить