Re[20]: как ускорить большое число INSERT и UPDATE (SQL Serv
От: Ziaw Россия  
Дата: 23.07.09 04:41
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>А какая разница? Я же сказал — кодогенерация.


Опять по кругу? Приплетать кодогенреацию вместо того чтобы написать 10 строк кода руками?

___>Ах вот она где собака порылась! Ты оказывацо не знаешь как работает триггер. Так вот триггер выполняется ровно один раз на ровно один оператор.


Код триггера в студию.
... << RSDN@Home 1.2.0 alpha 4 rev. 1228>>
Re[21]: как ускорить большое число INSERT и UPDATE (SQL Serv
От: _d_m_  
Дата: 23.07.09 05:01
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, _d_m_, Вы писали:


___>>А какая разница? Я же сказал — кодогенерация.


Z>Опять по кругу? Приплетать кодогенреацию вместо того чтобы написать 10 строк кода руками?


Да что ты нас стращаешь? Каких еще нафиг 10 строк. Проходили — нет проблем. В нашем случае стандартная репликация не подходит. Так что для кодогенерации нарисовал один класс — используются шаблоны с параметрами.

___>>Ах вот она где собака порылась! Ты оказывацо не знаешь как работает триггер. Так вот триггер выполняется ровно один раз на ровно один оператор.


Z>Код триггера в студию.


Тебе надо не код триггера смотреть, а документацию

Например:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[пРепликация_Товары_Удал_ЗамВст] on [dbo].[пРепликация_Товары_Удал]
--# with encryption
instead of insert
as begin
    set nocount on;

    delete
        dbo.Товары
    from
        dbo.Товары т
            inner join
        inserted вст
                on
                    т.Код=вст.Код
    ;

end
Re[22]: как ускорить большое число INSERT и UPDATE (SQL Serv
От: Ziaw Россия  
Дата: 23.07.09 05:29
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Да что ты нас стращаешь? Каких еще нафиг 10 строк. Проходили — нет проблем. В нашем случае стандартная репликация не подходит. Так что для кодогенерации нарисовал один класс — используются шаблоны с параметрами.


Какая стандартная репликация? Я обсуждаю вопрос как оптимальнее удалить записи из одной БД, если мы имеем ридер читающий их ключи из другой БД.

___>
___>SET ANSI_NULLS ON
___>GO
___>SET QUOTED_IDENTIFIER ON
___>GO
___>ALTER trigger [dbo].[пРепликация_Товары_Удал_ЗамВст] on [dbo].[пРепликация_Товары_Удал]
___>--# with encryption
___>instead of insert
___>as begin
___>    set nocount on;

___>    delete
___>        dbo.Товары
___>    from
___>        dbo.Товары т
___>            inner join
___>        inserted вст
___>                on
___>                    т.Код=вст.Код
___>    ;

___>end
___>


Ага, statement level trigger.
Тут еще лучше, сначала мы вставим данные куда-то. Операция недешевая, мы либо выкинем из памяти нужные данные, либо вообще не влезем в память и будем скидывать вставляемые данные на диск, а потом читать их оттуда. Очень здорово. Надеюсь вы понимаете, что это решение не масштабируется. Оно жрет ограниченные ресурсы O(N).

Это все ради того, чтобы не генерировать delete from?
... << RSDN@Home 1.2.0 alpha 4 rev. 1228>>
Re[23]: как ускорить большое число INSERT и UPDATE (SQL Serv
От: _d_m_  
Дата: 23.07.09 06:21
Оценка: :)
Здравствуйте, Ziaw, Вы писали:

Z>Ага, statement level trigger.

Z>Тут еще лучше, сначала мы вставим данные куда-то. Операция недешевая, мы либо выкинем из памяти нужные данные, либо вообще не влезем в память и будем скидывать вставляемые данные на диск, а потом читать их оттуда. Очень здорово. Надеюсь вы понимаете, что это решение не масштабируется. Оно жрет ограниченные ресурсы O(N).


Прекрасно масштабируется. Ты когда говоришь про дешевезну чего-либо, не забывай добавлять по сравнению с чем.
Так и с чем мы сравниваем? Со строкой с параметрами?
Если даже забыть про ограничения на размер батча. Даже если забыть про необходимость затрат ресурсов на генерацию на клиенте. Этот оператор должен ведь придти на сервер, он должен его разместить в памяти, разобрать — операция недешевая.

Z>Это все ради того, чтобы не генерировать delete from?


Заааачеееем? Нафиг мне его генерировать. Есть решение проще и легковесней — я про него как раз и говорю. Если следовать твоей логике — то и поддержка версионных уровней изоляций "не масштабируется и жрет ограниченные ресурсы".

PS: Кстати, удаление как и обновление может проводится по частям, например по 50 тысяч строк. Оператор TOP рулит.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.