SQLite INSERT

Компьютеры программирование базы данных sql SQLite

Создаю таблицу запросом:
CREATE TABLE TABLE1 (V1TEXT PRIMARY KEY, V2I NTEGER, V3 INTEGER)
далее добавляю поля запросом:
INSERT INTO TABLE1 (V1, V2, V3) VALUES("Тут всегда разная строка","100","100")
делаю INSERT около 100 000 раз. На все дело уходит около 2 часов на i7 4770K
Можно ли как-то оптимизировать запрос что бы дело шло быстрей? Если можно поясните физический смысл улучшения. Заранее спасибо.
Ответы:
Не верю. разве что у тебя на флэшке база - тогда да, так примерно и будет. Учи BEGIN TRANSACTION; и COMMIT; Хотя там учить нечего, просто обёртка для такого.
1. Если есть возможность, то сначала выгрузите данные в файл, потом используйте команду .import из консоли SQLite
2. Оберните вставки в транзакцию. Или, как вариант, не исключено, что будет быстрее, разбейте, например на 100 транзакций по 1000 INSERT'ов в каждой.
3. Не факт, что будет быстрее, но возможно, таки будет, если сначала вставить данные только в первый столбец, а значения "100" во 2-м и 3-м заполнить UPDATE'ом
4. Используйте в качестве PRIMARY KEY дефолтный ROWID, а по полю V1TEXT уже после заполнения таблицы банально создайте уникальный индекс.
Пробуем так - INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
У SQLite 3 по умолчанию настроен auto commit после каждой SQL инструкции, которая меняет базу. Единственный способ отключить этот механизм - это окружить все 100 000 инсертов двумя командами:
BEGIN
100 000 инсертов
COMMIT
Т.е. запихнуть их в единую транзакцию, а иначе вы получите 100 000 транзакций.
На закрытия самой транзакции: обновление базы, запись в журнал изменений и т.д. уходит во много раз больше времени чем на выполнение SQL инструкции. Поэтому закрывайте транзакцию только один раз в конце и все.


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.