Spróbuj tego:
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)
Przekaż polecenie sql tylko raz dla wszystkich wierszy. Poza obciążeniem wydajnościowym związanym z wydawaniem dodatkowych poleceń sql, zauważ, że sam rozmiar ciągu sql (w bajtach) prawdopodobnie przewyższa rozmiar rzeczywistych testowanych danych.
Używanie id2 jako generatora bez tablicy powinno również unikać ładowania całego zestawu danych do pamięci.