u4upy
Окт. 25, 2009 19:33:10
Нудный я…))
.........
q.prepare ("INSERT INTO test (number) VALUES (?)")
q.addBindValue(xrange(rows))
q.execBatch()
.........
c.executemany('insert into test(number) values (?)', ((i, ) for i in xrange(rows)))
>>>
0.171999931335
0.139999866486
>>>
Наверно окончательный вариант, быстрее не сделать.
ZZZ
Окт. 25, 2009 21:13:14
Хоспадя!.. Да что ж вы гонитесь за этими сотыми секунд? У вас что, высоконагруженный сервер? Ну так проапгрейдите железо! Не можете? – пишите на Си и/или асме!
Вы же выбрали питон, язык сам по себе медленный. Изначально, так сказать. Вот только всем его хватает. Ну почти всем. По крайней мере вам в ближайшем будущем точно хватит. И мне, я полагаю…
Вот не так давно с одним явером спорили – он с ПиАшПи на яву пересел, потому что она быстрее… Бред!
P.S. Простите, наболело…
u4upy
Окт. 25, 2009 23:17:34
ZZZ
Хоспадя!..
Дело не в сотых. Я понимаю что вставка 10 000 записей разом нечастый случай. Тема то началась с того, что был напуган “необьяснимой” разницей в скорости. А оказалось все не так страшно, надо всего лишь читать глазами и писать руками, и спрашивать совета у хороших людей). Полезно было уяснить про executemany() и execBatch(), что при множественной вставке только так и надо.
Так что все гут. )
villager
Окт. 26, 2009 00:39:42
может не совсем в тему, но QtSql и скорость присутствуют:
проверка БД наличие таблицы - надо сделать 30 раз
есть QSqlDatabase.tables()
но в зависимости от БД -(SQLite или Mysql) имена таблиц могут быть на разных регистрах
надо строить список и приводить к верхнему регистру - это секунды 3-4
а если использовать QSqlDatabase.record(имя_таблицы_В_ЛюБом_регистрЕ) - порядка 1сек
это к тому, что в нужно обход искать иногда…
PooH
Окт. 26, 2009 05:41:12
u4upy
Полезно было уяснить про executemany() и execBatch(), что при множественной вставке только так и надо.
Кстати, у executemany есть ограничение - максимальный размер пакета обрабатываемый базой данных.
ZZZ
Окт. 26, 2009 06:25:46
В реальности ни разу не сталкивался и не думаю, что столкнусь.
PooH
Окт. 26, 2009 07:38:44
ZZZ
В реальности ни разу не сталкивался и не думаю, что столкнусь.
А я вот столкнулся, mysql, скрипт массовой загрузки данных, задрал в параметрах max_allowed_packet и резал списки в executemany на куски :) Зато залетало со свистом