2015-03-16 1 views
-2

У меня более 12 миллионов записей в таблице с более чем 6000 данных о запасах за последние 15 лет. Я пытаюсь обновить вчерашнюю цену. См. Таблицу примеров ниже. Единственный метод, который я могу придумать для обновления вчерашней цены, - это использование языка скриптов. Я использую C# для записи всех записей. Первый цикл - получить весь символ, второй цикл через каждый символ из первого цикла и обновить вчерашнюю цену за один день до этого. Это занимает очень много времени. Любые идеи, новые методы и другой подход, ускоряющий процесс?Лучший способ обновить более 12 миллионов записей Loop или no loop

Symbol, todayis, price, yesterdayprice 
---- --------- ------ ------ 
aapl, 5/13/2015, 123.59, 124.45 
aapl, 5/12/2015, 124.45, 122.24 
aapl, 5/11/2015, 122.24, don't know 
aapl, 5/10/2015, 127.41, don't know 
+1

Недостаточно информации, важна ли производительность для вас? Если так вы слышали о пакетных обновлениях? Как насчет планирования времени простоя? Если скорость важна для вас, подумайте о пакетном обновлении и планируйте эти партии при низком времени использования. – JonH

+0

Это резервная база данных. Время от времени не важно. Пакет, вы имеете в виду разбить их несколькими партиями? – user3690095

+0

это ломается нормализация. –

ответ

1

Вы должны быть в состоянии сделать это обновление с помощью одного оператора SQL, например:

UPDATE MyTable t 
    LEFT OUTER JOIN MyTable y 
       ON y.Symbol=t.Symbol AND t.todayis = subdate(y.todayis, 1) 
SET a.yesterdayprice = COALESCE(y.price, 'don't know') 

This UPDATE пытается выполнить автообъединение, соответствующий символ и вычислительной вчерашнюю дату через subdate(y.todayis, 1) (t означает «today», y означает «вчера»).

Когда соответствующая строка найдена, COALESCE предоставляет значение от нее до обновления. Когда строки нет, в качестве значения по умолчанию используется строка 'don't know'.

+0

В нем говорится, что подсчет не распознается встроенными функциями. Кроме того, цена Yesterdays технически не означает, что вчера есть выходные и праздничные дни. Я должен был сказать последнюю цену дня транзакции. – user3690095

+0

@ user3690095 Каков тип столбца 'todayis'? Это «дата»? – dasblinkenlight

+0

Да, это тип даты – user3690095

Смежные вопросы