Я пытаюсь получить информацию из базы данных, используя кортеж Python, содержащий набор идентификаторов (от 1000 до 10000 идентификаторов), но мой запрос использует оператор IN
и впоследствии очень медленный.
query = """ SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
LEFT JOIN ..
LEFT JOIN ...
WHERE table1.id IN {} """.format(my_tuple)
и затем я запрашиваю базу данных, используя PostgreSQL, чтобы зарядить результат в Pandas фрейме данных:
with tempfile.TemporaryFile() as tmpfile:
copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
query=query, head="HEADER"
)
conn = db_engine.raw_connection()
cur = conn.cursor()
cur.copy_expert(copy_sql, tmpfile)
tmpfile.seek(0)
df = pd.read_csv(tmpfile, low_memory=False)
Я знаю, что IN
не очень эффективен с большим количеством параметры, но я не имею ни малейшего представления, чтобы оптимизировать эту часть запроса. Любой намек?