Russian Qt Forum
Сентябрь 22, 2024, 14:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Объединение запросов в exec()  (Прочитано 6601 раз)
Flakes
Гость
« : Октябрь 07, 2008, 11:53 »

У меня есть цикл с кучей query.exec(), и вся проблема что каждый exec() жрет много катастрофически важного времени. Можно ли как копить их в строку и выполнить один exec(), например разделяя запросы ";\n" или что то в этом роде. У меня ничего не вышло, а так хочется!
Записан
crossly
Гость
« Ответ #1 : Октябрь 07, 2008, 12:01 »

ч\з \n точно нет.... Улыбающийся.... а процедуркой никак.... ??
Записан
Flakes
Гость
« Ответ #2 : Октябрь 07, 2008, 12:04 »

что именно процедуркой?
Записан
Alex03
Гость
« Ответ #3 : Октябрь 07, 2008, 12:22 »

У меня есть цикл с кучей query.exec(), и вся проблема что каждый exec() жрет много катастрофически важного времени.
Если каждый запрос жрёт много времени, то почему Вы думаете что все разом они сожрут меньше времени?
Если запросы идентичны (меняются только данные), как например при вставке большого кол-ва данных в одну таблицу, то полезно один раз выполнить prepare() и потом много раз выполнять bind()/exec(). Впрочем это уже зависит от задачи и используемой СУБД.
Записан
Flakes
Гость
« Ответ #4 : Октябрь 07, 2008, 12:39 »

теперь я понял про какую вы процедурку Улыбающийся Чтож, придется писать сложные запросы, чтоб одним махом все делали
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Октябрь 07, 2008, 12:57 »

с процедурками сложновато будет
а вот транзакция самое то
типа

Код:
BEGIN;
SELECT * FROM table1;
SELECT * FROM table2;
SELECT * FROM table2;
END;

а процедурки хороши когда логику в базу данных запихать хотим
Записан
Tonal
Гость
« Ответ #6 : Октябрь 07, 2008, 20:30 »

Всё зависит от запросов - что они делают и зачем они это делают, а так же от типа сервера.
Записан
kirill
Гость
« Ответ #7 : Октябрь 08, 2008, 06:22 »

с процедурками сложновато будет
а вот транзакция самое то
типа

Код:
BEGIN;
SELECT * FROM table1;
SELECT * FROM table2;
SELECT * FROM table2;
END;

Этот код можно забить в query как один запрос? или какой-то другой тип "транзакция" требуется?
Записан
Flakes
Гость
« Ответ #8 : Октябрь 08, 2008, 07:33 »

Код:
BEGIN;
SELECT * FROM table1;
SELECT * FROM table2;
SELECT * FROM table2;
END;

Спасибо, про такие не знал!
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #9 : Октябрь 08, 2008, 08:03 »

каждый запрос - это 1 транзакция
но запросы можно объединять
например psql делает 4000 вставок за 1 секунду в 1 транзакции ( наши прикидывали)
Записан
Alex03
Гость
« Ответ #10 : Октябрь 08, 2008, 12:30 »

ТАк и не понял чего надо топикстартеру, но ещё может вот это поможет?
Цитировать
bool QSqlQuery::execBatch ( BatchExecutionMode mode = ValuesAsRows )

Executes a previously prepared SQL query in a batch. All the bound parameters have to be lists of variants. If the database doesn't support batch executions, the driver will simulate it using conventional exec() calls.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.