Използвам c ++ и работя с sqlite. В python, имам executemany операция в библиотеката, но c + + библиотеката, която използвам, няма тази операция.
Чудех се как изпълняващата операция оптимизира заявките, за да ги направи по-бързи.
Гледах в sqlite c / c ++ api и видях, че има две команди: sqlite3_reset и sqlite3_clear_bindings, които могат да се използват за изчистване и повторно използване на подготвени отчети.
Това ли е това, което питон прави, за да партидира и ускори изпълнителните запитвания (поне за вложки)? Благодаря за отделеното време.
Отговори:
2 за отговор № 1executemany
просто свързва параметрите, изпълнява изявленията и се обажда sqlite3_reset
, във верига.
Python не ви дава директен достъп доизявление след като е било подготвено, така че това е единственият начин да го използваме отново. Въпреки това, SQLite не отнема много време за изготвяне на отчети, така че е малко вероятно това да има голям ефект върху производителността.
Най-важното за представянето е да се групират отчети в транзакция; Python се опитва да бъде умен и за да направите това автоматично (независимо от executemany
).
0 за отговор № 2
Погледнах в някои от съответните публикации и намерихследващата, която е много подробна за начините за подобряване на sqlite партида вмъкване performace. Тези принципи могат ефективно да се използват за създаване на изпълняваща функция.
Подобряване на производителността на SQLite в INSERT за секунда?
Най-големите промени в подобренията са наистина@CL. каза, превръщайки всичко в една сделка. Авторът на другия пост също установи значително подобрение чрез използване и повторно използване на подготвени отчети и игра с някои прагма настройки.