crossplatform.ru

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

4 страниц V  < 1 2 3 4 >  
Ответить в данную темуНачать новую тему
> Как ускорить создание таблицы (через QSqlQuery)?
Tonal
  опции профиля:
сообщение 17.2.2009, 9:29
Сообщение #11


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


Цитата(Litkevich Yuriy @ 16.2.2009, 20:27) *
trdm, транзакция не ускоряет процесс, она лишь делает его атомарным

Действительно так, но если ты явно не стартуешь транзакцию, то Qt её стартует на каждый запрос.
А старт и окончание транзакции может занять довольно много времени (в зависимости от типа движка). :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 17.2.2009, 9:55
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(Rocky @ 16.2.2009, 15:15) *
СУБД SQLite 3.


На тему скоростей sqlite было несколько статей в интернете с рекомендациями. Можно добавить следующие опции SQL запросом:

PRAGMA synchronous = OFF;
PRAGMA page_size = 4096;


На самом деле page_size зависит от операционной системы/файловой системы. Для винды одно значение оптимальное, для *nix'ов другое. В общем погугли на тему этих комманд.

Еще обращу внимание на такие методы (псевдокод):

    query.prepare(QLatin1String("INSERT INTO table (field1, field2) VALUES (?,?);"));
...
    QVariantList field1, field2;
    field1 << 1 << 2 << 3 << 4;
    field2 << 5 << 6 << 7 << 8;
...
    addBindValue(field1);
    addBindValue(field2);
...
query.execBatch(QSqlQuery::ValuesAsRows);

Т.е. в QSqlQuery можно передавать сразу целые списки для каждого объявленного поля, драйвер сформирует сам запросы.

Сообщение отредактировал SABROG - 17.2.2009, 9:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 17.2.2009, 10:21
Сообщение #13


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

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

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




Репутация:   7  


Ххе, ясно. SABROG, спасибо, погуглю..

Я тут добавил транзакции, я в шоке :o:. Время с 18 мин. упало до 9-ти сек. Я не успел пасьянс открыть, как программа заявила что все таблицы сформированы :)

Эх, осталось разобраться только почему программно не удается менять значения в базе... ((

Вобщем, всем большое спасибо! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Константин
  опции профиля:
сообщение 17.2.2009, 11:53
Сообщение #14


Студент
*

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

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




Репутация:   1  


повышай SABROG-а за это.

Сообщение отредактировал Константин - 17.2.2009, 12:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.2.2009, 12:01
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Rocky @ 17.2.2009, 13:21) *
Ххе, ясно. SABROG, спасибо,
просто ткни "Спасибо"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 17.2.2009, 17:44
Сообщение #16


Дмитрий Трошин
****

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

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




Репутация:   6  


а я что :) недостоин плюсика? :) волки :)
нас тупых 1С-ников нихто не любит ))))

Сообщение отредактировал trdm - 17.2.2009, 17:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 17.2.2009, 18:09
Сообщение #17


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

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

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




Репутация:   7  


Упс, сорри :) Так лучше? :)))))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 17.2.2009, 18:12
Сообщение #18


Дмитрий Трошин
****

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

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




Репутация:   6  


блин, пошутить нельзя без последствий :)

Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 17.2.2009, 21:37
Сообщение #19


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

Группа: Участник
Сообщений: 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

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


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Только для изменения таблиц.

Если не устраивает скорость выборки, то рекомендую создать индексы по полям. Здорово увеличивает скорость.
Индексы обычно создаются по полям, которые участвуют в "order by". Если SQL запрос статичный в принципе, то можно сделать вьюху (create view). Выборку можно будет вызывать например так "select myview" (если память не отшибает).
Индексы создаются так:

CREATE INDEX IF NOT EXISTS mytable_index ON mytable (col1, col2, col3);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 20.4.2024, 11:48