Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python for循环中嵌入的SELECT查询与语法中的WHERE id之间的差异_Python_Mysql_Mysql Python - Fatal编程技术网

Python for循环中嵌入的SELECT查询与语法中的WHERE id之间的差异

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_

这些方法中有一种表现更好吗?有更好的方法吗?为什么?我是否用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 就

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执行几次。但有时,由于网络负载和大查询负载数据库,最好是执行多个响应较小的查询,而不是执行一个响应较大的查询。