Как ускорить создание таблицы (через QSqlQuery)? |
Здравствуйте, гость ( Вход | Регистрация )
Как ускорить создание таблицы (через 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? Спасибо! |
|
|
Litkevich Yuriy |
16.2.2009, 13:45
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
обязательно ли перед каждым вызовом QSqlQuery::exec использовать QSqlQuery::prepare (все это происходит в цикле)? да он для того и предназначен, чтобы его вынести можно было из цикла:
Создаю таблицу и заполняю ее посредством запроса INSERT. В таблицы больше 1к записей и заполнение идет очень долго... Что за СУБД и сколько по времени это занимает?
|
|
|
Rocky |
16.2.2009, 15:15
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
СУБД SQLite 3.
В базе 11 таблиц, общее число вставляемых записей около 5.3к. 5.3к записей вставляется 18 мин (prepare я уже вынес из тел циклов). Задержек в других местах в коде нет точно (есть только цикл, внутри которого bindValue и exec). Когда работал через ODBC с MS Access, было все намнооого быстрее (4к записей около минуты)... |
|
|
Litkevich Yuriy |
16.2.2009, 16:05
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Rocky |
16.2.2009, 16:31
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
А есть какой-нибудь "легкий" вариант, т.е. чтобы база была под рукой (рядом с прогой), но кроме драйвера ничего не требовалось устанавливать? (никаких серверов БД и пр).
|
|
|
trdm |
16.2.2009, 16:57
Сообщение
#6
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
Создаю таблицу и заполняю ее посредством запроса INSERT. В таблицы больше 1к записей и заполнение идет очень долго... Можно ли как-нибудь ускорить запись? Оптимизировать это дело?
bool transaction () и т.п. Сообщение отредактировал trdm - 16.2.2009, 17:00 |
|
|
Litkevich Yuriy |
16.2.2009, 17:27
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
trdm, транзакция не ускоряет процесс, она лишь делает его атомарным
А есть какой-нибудь "легкий" вариант, т.е. чтобы база была под рукой (рядом с прогой), но кроме драйвера ничего не требовалось устанавливать? (никаких серверов БД и пр). можно FireBird или MySQL использовать, у них есть встраиваемые версии, dll'ку подкладываешь в каталог приложения и все.Обе эти СУБД хранять БД в виде одного файла (бывают конечно и многофайловые БД, но это уже другая история) |
|
|
trdm |
16.2.2009, 18:00
Сообщение
#8
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
|
|
|
panter_dsd |
16.2.2009, 19:38
Сообщение
#9
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
Полностью согласен с trdm, сам сталкивался. Соотношения времени огромные. У меня до использования транзакции работа занимала минуты три, после использования онной стало несколько секунд. О как.
|
|
|
Константин |
16.2.2009, 21:44
Сообщение
#10
|
Студент Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: 1 |
можно FireBird или MySQL использовать, у них есть встраиваемые версии, dll'ку подкладываешь в каталог приложения и все. Обе эти СУБД хранять БД в виде одного файла (бывают конечно и многофайловые БД, но это уже другая история) встроенный мускуль хранит базы так же, как и полноценный и с ним чуть больше гемора... |
|
|
Текстовая версия | Сейчас: 14.1.2025, 20:31 |