Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизFibPlus - есть ли аналог UpdateBatch ? Найти похожие ветки
← →
без ника (2006-09-19 11:09) [0]Есть ли в компонентах FibPlus аналог UpdateBatch из ADO?
Сейчас я добавляю (изменяю) данные с помощью сторед процедур(TFibStoredProc) . Но иногда бывает, что изменяется сразу 50-100 записей - подтормаживает. Хотелось бы отдать серверу изменения 1 пакетом.
← →
ANB © (2006-09-19 11:47) [1]Что значит пакетом ? Много маленьких апдейтов - сильно быстрее не будет, т.к. все равно по очереди выполнятся будут.
Напиши один грамотный апдейт и выполни.
← →
Виталий Панасенко (2006-09-19 12:06) [2]кэширование тебе поможет(должно)
← →
без ника (2006-09-19 12:09) [3]собственно о чем писал:
Допустим есть процедура для вставки записи StoredProc1. Чтобы вставить 100 записей - 100 вызовов. Тормоза. Самому генерировать скрипт на Insert хм... скажем так не охота :)
Нашел решение для Fib, собственно делается с пом-ю FibDataSet :
1. Прописать SQL на SELECT "SELECT P1,P2,P3 FROM T";
2. Прописать SQL на Insert "INSERT INTO T (P1,P2,P3) VALUES (:P1,:P2,:P3)";
3. FibDataSet.CachedUpdates := True;
3. FibDataSet.Active:=True;
4. далее в цикле :
FibDataSet.Append;
FibDataSet.FieldByName("P1").Value := XXXX;
....
FIBDataSet.Post;
и потом FibDataSet.ApplyUpdates;
ну и транзакцию Commit; Вот так решилась проблема.
← →
без ника (2006-09-19 12:11) [4]2000 - вставок в цикле ~ 2 сек,а если делать 1000 вызовов хранимой процедуры уже ~ 6 сек.
← →
без ника (2006-09-19 12:12) [5]А ну да, если нужно сделать множественный Update - собственно заполнить SQL на Update :)
← →
ANB © (2006-09-19 12:51) [6]
> без ника (19.09.06 12:11) [4]
Пынятно, сам вызов хранимки тоже время кушает.
Откуда данные для вставки берешь ?
← →
без ника (2006-09-19 16:33) [7]Да из за этих накладных расходов тормоза и образуются.
Данные для вставки - это список(аналог TList"a ток под типизированные данные). Точнее скажем, так буфер куда приходят результаты измерений, их нужно просто тупо записать в базу. Желательно побыстрее :)
← →
ANB © (2006-09-19 17:12) [8]
> без ника (19.09.06 16:33) [7]
Есть идея.
FB поддерживает конструкцию типа :
select * from
(
select 1 ID "Вася" Name from dual
union all
select 2 ID "Петя" Name from dual
union all
select 3 ID "Коля" Name from dual
)
?
← →
без ника (2006-09-20 11:08) [9]в принципе данный синтаксис поддерживается. Но не поддерживается синтаксис(хотя я пока поверхностно смотрел) :
Select 1 AS P1,
2.3 AS P2,
"XX" AS P3
так бы можно было создать большой SQL запрос вида:
inser Into T(P1,P2,P3)
From ( SELECT 1 AS P1,
2.3 AS P2,
"XX" AS P3
UNION ALL
SELECT 3 AS P1,
55.1 AS P2,
"YY" AS P3
....
)
Но во первых не очень хочется делать все ручками :) а во вторых по опыту общения с MSSQL, знаю, что есть какое то ограничение на объем передаваемого SQL запроса (хотя может это и пролемы ADO). А тут он може оказаться громадным -> его придется разбивать на несколько INSERT"ов. В принципе пока быстродействия хватает, потом можно будет попробовать и такой вариант.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.054 c