Python for循环中嵌入的SELECT查询与语法中的WHERE id之间的差异
这些方法中有一种表现更好吗?有更好的方法吗?为什么?我是否用python做这件事有关系吗?您可以正确地假设my_表的id列上有一个索引 运行SELECT语句,嵌入到for循环中: 对于\u id的\u长\u列表中的\u id: cursor.executeSELECT*从my_表中,id=%s,一个_id, 做点什么cursor.fetchall 使用语法中的WHERE id运行单个SELECT语句: cursor.executeSELECT*从id位于%s中的my_表中, “,”。joina_long_列表_id, 做点什么cursor.fetchall 就Python for循环中嵌入的SELECT查询与语法中的WHERE id之间的差异,python,mysql,mysql-python,Python,Mysql,Mysql Python,这些方法中有一种表现更好吗?有更好的方法吗?为什么?我是否用python做这件事有关系吗?您可以正确地假设my_表的id列上有一个索引 运行SELECT语句,嵌入到for循环中: 对于\u id的\u长\u列表中的\u id: cursor.executeSELECT*从my_表中,id=%s,一个_id, 做点什么cursor.fetchall 使用语法中的WHERE id运行单个SELECT语句: cursor.executeSELECT*从id位于%s中的my_表中, “,”。joina_
for an_id in a_long_list_of_ids:
cursor.execute("SELECT * FROM my_table WHERE id=%s", (an_id,))
do_something(cursor.fetchall())
您正在对数据库执行lena_long_list_of_id查询
万一
cursor.execute("SELECT * FROM my_table WHERE id IN (%s)",
(','.join(a_long_list_of_ids),)
)
do_something(cursor.fetchall())
您只执行一个查询
很明显,第二种方式更有效
如果希望获得更高的性能,请仅选择将要使用的列—这会更快
如果要对Python进行额外的过滤,考虑将过滤逻辑放在查询中,这也会使处理更快。
第二种方法可能会更好地运行,因为对@ MeGAWAC的dBuffic查询较少。由于与建立连接和在磁盘上定位数据相关的开销,通常最好允许db进行这些类型的计算。因此,正是由于建立查询和与服务器通信的开销,才使得选项2更快?如果查询速度慢,我希望这个差异是可以忽略的,但是从快速测试中,我看到选项2比选项1提高了2倍。每个查询都意味着连接到服务器,将查询传递给服务器,等待服务器执行查询,序列化结果,并通过连接将结果传递回客户端。查询有多复杂并不重要。很明显,执行一次查询要比执行几乎相同的查询快——只使用一个id执行几次。但有时,由于网络负载和大查询负载数据库,最好是执行多个响应较小的查询,而不是执行一个响应较大的查询。