crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Как ускорить создание таблицы (через QSqlQuery)?
Rocky
  опции профиля:
сообщение 16.2.2009, 13:32
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Создаю таблицу и заполняю ее посредством запроса INSERT. В таблицы больше 1к записей и заполнение идет очень долго... Можно ли как-нибудь ускорить запись? Оптимизировать это дело?

Да, кто знает, обязательно ли перед каждым вызовом QSqlQuery::exec использовать QSqlQuery::prepare (все это происходит в цикле)? Или QSqlQuery::prepare достаточно вызывать один раз перед циклом, а внутри делать только QSqlQuery::bindValue и затем QSqlQuery::exec?

Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 17.2.2009, 21:37
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


:)

По-поводу транзакций... Ув. форумчане, не подскажите вот при навигации по таблице БД, нужно их использовать? Или они толку не дадут?
QSqlQuery oQuery;

//вот тут transaction
oQuery.exec(QString("SELECT * FROM %1").arg(m_sInternalDatabaseName));
QSqlRecord oRecord = oQuery.record();

int nPipeType = oRecord.indexOf("PipeType");
int nDOutside = oRecord.indexOf("D_outside");
int nDInside = oRecord.indexOf("d_inside");
int nRoughness = oRecord.indexOf("Roughness");
int nLamda = oRecord.indexOf("Lamda");
    
m_roPipes.clear();
while (oQuery.next())
{
    m_roPipes.insert(CPipe(oQuery.value(nPipeType).toString(), oQuery.value(nDOutside).toString(),
            oQuery.value(nDInside).toString(), oQuery.value(nRoughness).toString(), oQuery.value(nLamda).toString()));
}
//вот тут commit

Или транзакции важны именно при вставке/удалении/обновлении базы данных?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 17.2.2009, 22:40
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Цитата(Rocky @ 17.2.2009, 21:37) *
Ув. форумчане, не подскажите вот при навигации по таблице БД, нужно их использовать? Или они толку не дадут?

Для ускорения навигации можно использовать следующее:
Цитата
void QSqlQuery::setForwardOnly ( bool forward )
Sets forward only mode to forward. If forward is true, only next() and seek() with positive values, are allowed for navigating the results.
Forward only mode can be (depending on the driver) more memory efficient since results do not need to be cached. It will also improve performance on some databases. For this to be true, you must call setForwardMode() before the query is prepared or executed. Note that the constructor that takes a query and a database may execute the query.
Forward only mode is off by default.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Rocky   Как ускорить создание таблицы (через QSqlQuery)?   16.2.2009, 13:32
- - Litkevich Yuriy   Цитата(Rocky @ 16.2.2009, 16:32) обязател...   16.2.2009, 13:45
- - Rocky   СУБД SQLite 3. В базе 11 таблиц, общее число встав...   16.2.2009, 15:15
- - Litkevich Yuriy   Цитата(Rocky @ 16.2.2009, 18:15) Когда ра...   16.2.2009, 16:05
- - Rocky   А есть какой-нибудь "легкий" вариант, т....   16.2.2009, 16:31
- - trdm   Цитата(Rocky @ 16.2.2009, 13:32) Создаю т...   16.2.2009, 16:57
- - Litkevich Yuriy   trdm, транзакция не ускоряет процесс, она лишь дел...   16.2.2009, 17:27
|- - trdm   Цитата(Litkevich Yuriy @ 16.2.2009, 17:27...   16.2.2009, 18:00
|- - Tonal   Цитата(Litkevich Yuriy @ 16.2.2009, 20:27...   17.2.2009, 9:29
- - panter_dsd   Полностью согласен с trdm, сам сталкивался. Соотно...   16.2.2009, 19:38
- - Константин   Цитата(Litkevich Yuriy @ 16.2.2009, 17:27...   16.2.2009, 21:44
- - SABROG   Цитата(Rocky @ 16.2.2009, 15:15) СУБД SQL...   17.2.2009, 9:55
- - Rocky   Ххе, ясно. SABROG, спасибо, погуглю.. Я тут добав...   17.2.2009, 10:21
- - Константин   повышай SABROG-а за это.   17.2.2009, 11:53
- - Litkevich Yuriy   Цитата(Rocky @ 17.2.2009, 13:21) Ххе, ясн...   17.2.2009, 12:01
- - trdm   а я что недостоин плюсика? волки нас тупых 1С-н...   17.2.2009, 17:44
- - Rocky   Упс, сорри Так лучше? ))))   17.2.2009, 18:09
- - trdm   блин, пошутить нельзя без последствий Спасибо.   17.2.2009, 18:12
- - Rocky   По-поводу транзакций... Ув. форумчане, не подскажи...   17.2.2009, 21:37
|- - Kagami   Цитата(Rocky @ 17.2.2009, 21:37) Ув. фору...   17.2.2009, 22:40
- - SABROG   Только для изменения таблиц. Если не устраивает с...   17.2.2009, 21:58
- - panter_dsd   В данном случае не дадут. В основном транзакции пр...   17.2.2009, 22:01
- - SABROG   Цитата(panter_dsd @ 17.2.2009, 22:01) есл...   17.2.2009, 22:06
- - panter_dsd   У меня нормально 5 клиентов на одной базе уживалос...   17.2.2009, 22:16
|- - SABROG   Цитата(panter_dsd @ 17.2.2009, 22:16) У м...   17.2.2009, 22:42
- - Rocky   Ага, теперь разобрался.. Спасибо   17.2.2009, 22:39
- - panter_dsd   И изменяют нормально. Блокировки работают. Т.е. п...   17.2.2009, 23:34
|- - trdm   Цитата(panter_dsd @ 17.2.2009, 23:34) И и...   18.2.2009, 0:50
- - Litkevich Yuriy   Цитата(Rocky @ 18.2.2009, 0:37) при навиг...   18.2.2009, 1:49
- - Tonal   Транзакции нужны для гарантирования атомарности из...   18.2.2009, 11:38
- - SABROG   Цитата(Tonal @ 18.2.2009, 11:38) Функция ...   18.2.2009, 11:52
- - Tonal   Последовательность их вызова зависит от компилятор...   18.2.2009, 13:10
- - 512es   Извиняюсь, что тема давнешняя. Но до сих пор, (раз...   20.3.2010, 20:57


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


15 чел. читают эту тему (гостей: 15, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.1.2025, 17:50