На первый взгляд может показаться, что производительность связана с комментарием, и я вижу аналогичные результаты с sqlite3 (20 секунд и 0,05 секунды). Но я думаю, что это немного больше.
Я заменил sqlite3 в вашем коде на пакет apsw , который имеет различную обработку транзакций, и при его использовании я видел 20 секунд для обоих тесты. Обратите внимание, что apsw автоматически не начинает транзакцию для вас, что делает sqlite3.
Затем я явно включил транзакцию начала / фиксации вокруг вставок 43k, и оба раза это занимало 0,05 с. Это имеет смысл, потому что этот код должен выполняться быстрее внутри транзакции.
Все это говорит мне о том, что sqlite3 использует транзакцию в одном случае (одна строка INSERT), а не в другом случае (многостраничный строка с комментарием и INSERT). Кроме того, кажется, что обработка транзакций в sqlite3, хотя и предназначена для упрощения работы пользователя, немного странна.
И, действительно, если я вставлю следующую транзакцию begin в явном виде, результаты sqlite3 будут быстрыми ( 0,05 с):
cursor.execute(table_sql)
cursor.execute("begin") # add this
for i in range(1, 43000):
cursor.execute(sql, [i])
con.commit()
Результат теста sqlite3 теперь:
sqlslow: 0.051317919000000004
sqlfast: 0.05007833699999999