Удаление из таблицы в SQLite с включенными внешними ключами кажется очень медленным.Можно ли что-нибудь сделать для повышения производительности (без отключения внешних ключей)?
import time
import sqlite3
def fk_check(state):
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute("CREATE TABLE parent (id integer primary key, name)")
c.execute("CREATE TABLE child (id integer primary key, parent_id references parent)")
c.execute("CREATE INDEX parentindex ON child(parent_id);")
c.execute(f"pragma foreign_keys={state};")
for i in range(10000):
c.execute("insert into parent (name) values (?);", ('name'+str(i),))
for i in range(5000, 10000):
c.execute("insert into child (parent_id) values (?);", (i,))
start = time.time()
c.execute("delete from parent where id < 5000")
took = time.time()-start
print(f'fk-{state}: {took}')
fk_check('on')
fk_check('off')
fk_check('on')
fk_check('off')
Имеет следующий вывод:
fk-on: 0.8750052452087402
fk-off: 0.0007216930389404297
fk-on: 0.8769822120666504
fk-off: 0.0007178783416748047