Re[3]: Скользящее окно (аналитические функции)
От: wildwind Россия  
Дата: 15.05.10 12:00
Оценка:
Здравствуйте, amalakhov, Вы писали:

A>Там всё несколько сложнее, увы... SC2 — на самом деле varbinary(32), int'ы из которого в селектах достаются через substring.

Это печально. Возможно, на "доставание" много времени и уходит. А нормализовать не получится?

A>А во-вторых, ставить индекс на varbinary в таблицу размером в 30 млн строк... мне страшно ) И опять же, это вопрос приоритетов — это скользящее среднее не так часто нужно высчитывать, чем например добавлять туда данные, так что я лучше буду ждать по 30 минут, чем поставлю ещё один индекс... Ну — имхо есессно.


Возможно помог бы индекс по UTC и что-то типа
 select sd.id, avg(av.SC2)
   from Science_data sd
   join Science_data av 
     on av.UTC between DATEADD(hour, -1, sd.UTC) AND DATEADD(hour, 1, sd.UTC)
  where sd.UTC between <ваши полгода>
  group by sd.id


Кстати выбор кластерного индекса тоже вызывает сомнение. Доступ к отдельным отсчетам по id это частая операция?

Если таблицу трогать не хочется, можно предложить вот что. Для расчета делать выборку за полгода в отдельную таблицу с нормализацией (можно задействовать динамический SQL). На этой таблице построить индекс по UTC, сделать расчет запросом выше и обновить исходную таблицу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.