这些方法中的一种表现更好吗?有更好的方法吗?为什么?我在python中这样做是否重要? (您可以正确地假设id
列的my_table
列上有索引。
运行嵌入for循环的SELECT
语句:
for an_id in a_long_list_of_ids:
cursor.execute("SELECT * FROM my_table WHERE id=%s", (an_id,))
do_something(cursor.fetchall())
使用SELECT
语法运行单个WHERE id IN
语句:
cursor.execute("SELECT * FROM my_table WHERE id IN (%s)",
(','.join(a_long_list_of_ids),)
)
do_something(cursor.fetchall())
答案 0 :(得分:1)
在
的情况下for an_id in a_long_list_of_ids:
cursor.execute("SELECT * FROM my_table WHERE id=%s", (an_id,))
do_something(cursor.fetchall())
您正在对数据库进行len(a_long_list_of_ids)
次查询。
如果是
cursor.execute("SELECT * FROM my_table WHERE id IN (%s)",
(','.join(a_long_list_of_ids),)
)
do_something(cursor.fetchall())
你只做一个查询。
很明显,第二种方式更具性能。
如果您想要更多性能,请仅选择您将使用的列 - 这样会更快。
如果要在Python端进行额外的过滤,可以考虑在查询中加入过滤逻辑 - 这样也可以加快处理速度。