Опитайте това:
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)
Предайте sql командата само веднъж за всички редове. В допълнение към производителността при издаване на допълнителни sql команди, забележете, че размерът на самия sql низ (в байтове) вероятно намалява размера на реалните данни, които се тестват.
Използването на id2 като генератор без масива също трябва да избягва зареждането на целия набор от данни в паметта.