Prova detta:
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)
Skicka kommandot sql endast en gång för alla rader. Utöver prestandaoverheaden för att utfärda ytterligare sql-kommandon, lägg märke till att storleken på själva sql-strängen (i byte) sannolikt dvärgar storleken på den verkliga data som testas.
Att använda id2 som en generator utan arrayen bör också undvika att ladda hela datamängden i minnet.