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

Откуда: Оттуда...
Сообщений: 26930
SQL-Server 2008, .net 3.5 - Приложение.
Приложение состоит из функций которые работают так:

1) Делается SELECT, если запись найдена то п.2 если нет п. 3

2) Делается UPDATE, возвращается ID записи.

3) Делается INSERT, возвращается ID вставленной записи.

Таких функций с десяток и они выполняются в цикле.
Перед циклом организуется транзакция - одна на весь цикл.
Средний цикл состоит из 50000 итераций.

В итоге SQL-Server грузит CPU под 100% и длится цикл несколько часов(!).
Железо: Старенький двухпроцессорный(НЕ двухядерный, а двухпроцессорный) Opteron 2.2 GHz.
3 GB RAM, HDD Interface - SATA
29 ноя 11, 13:21    [11677311]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Написать функции, которые сделают все 3 пункта без цикла
29 ноя 11, 13:25    [11677348]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
M234,

1. MERGE
2. А цикл-то зачем? Не понимаю....
29 ноя 11, 13:25    [11677358]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
M234
Member

Откуда: Оттуда...
Сообщений: 26930
iap
M234,

1. MERGE
2. А цикл-то зачем? Не понимаю....


А MERGE как мне ID найденной/вставленной записи-то вернёт?

Цикл нужен ибо функции в последующих итерациях зависят от ID полученных в предыдущих.
29 ноя 11, 13:37    [11677509]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
M234
iap
M234,

1. MERGE
2. А цикл-то зачем? Не понимаю....


А MERGE как мне ID найденной/вставленной записи-то вернёт?

Цикл нужен ибо функции в последующих итерациях зависят от ID полученных в предыдущих.
OUTPUT
29 ноя 11, 13:38    [11677520]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
M234
пропущено...


А MERGE как мне ID найденной/вставленной записи-то вернёт?

Цикл нужен ибо функции в последующих итерациях зависят от ID полученных в предыдущих.
OUTPUT
+$action
29 ноя 11, 13:38    [11677526]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
M234
Цикл нужен ибо функции в последующих итерациях зависят от ID полученных в предыдущих.
Обход дерева какой-нибудь?
Рекурсия, да?
29 ноя 11, 13:39    [11677535]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
M234
Member

Откуда: Оттуда...
Сообщений: 26930
iap
M234
Цикл нужен ибо функции в последующих итерациях зависят от ID полученных в предыдущих.
Обход дерева какой-нибудь?
Рекурсия, да?


Обработка статистики. Ну и дабы не забивать таблицы редундантными данными - "всё крошится в капусту".
29 ноя 11, 13:49    [11677621]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
M234
Цикл нужен ибо функции в последующих итерациях зависят от ID полученных в предыдущих.
И процедурное мышление "крошится в капусту".
29 ноя 11, 14:34    [11678061]     Ответить | Цитировать Сообщить модератору
 Re: Как помочь SQL-Server'у? INSERT/UPDATE в цикле.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
M234
iap
M234,

1. MERGE
2. А цикл-то зачем? Не понимаю....


А MERGE как мне ID найденной/вставленной записи-то вернёт?

Цикл нужен ибо функции в последующих итерациях зависят от ID полученных в предыдущих.
Нормальное решение задачи для РСУБД - приложение передаёт серверу множество (набор) данных, сервер меняет данные в базе в соответствии с запрограммированной бизнес-логикой, далее возвращает приложению множество-результат с ИД-шниками и всем тем, что ему надо.
29 ноя 11, 15:56    [11678723]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить