Essayez ceci :
id2 = csv.reader(open(os.path.join(perf_dir,id_files[1])))
h = tuple(next(id2))
create = '''CREATE TABLE id2 (%s varchar, %s int PRIMARY KEY, %s int)''' % h
insert = '''INSERT INTO id2 (%s, %s, %s) VALUES (%%s, %%s, %%s)''' % h
...
cr.executemany(insert, id2)
Passez la commande sql une seule fois pour toutes les lignes. En plus de la surcharge de performances liée à l'émission de commandes sql supplémentaires, notez que la taille de la chaîne sql elle-même (en octets) éclipse probablement la taille des données réelles testées.
L'utilisation de id2 comme générateur sans le tableau devrait également éviter de charger l'intégralité de l'ensemble de données en mémoire.