如何使Python在处理Mysql查询时更快

如何使Python在处理Mysql查询时更快,python,mysql,python-multithreading,Python,Mysql,Python Multithreading,我有一个非常简单的mysql查询,如下所示: db = getDB() cursor = db.cursor() cursor.execute('select * from users') results = cursor.fetchall() for row in results: process(row) 假设users表有10亿条记录,一条记录的处理方法需要10毫秒。 上面的代码将完成将所有数据提取到客户端,然后启动process方法。这真是浪费时间。我应该做查询和并行处理吗 因

我有一个非常简单的mysql查询,如下所示:

db = getDB()
cursor = db.cursor()
cursor.execute('select * from users')
results = cursor.fetchall()
for row in results:
    process(row)
假设users表有10亿条记录,一条记录的处理方法需要10毫秒。 上面的代码将完成将所有数据提取到客户端,然后启动process方法。这真是浪费时间。我应该做查询和并行处理吗


因此,我想将fetchall()更改为fetchmany(),并在游标开始查询新结果时启动一个新线程来处理检索到的结果。

在select query中进行更改。您正在进行什么样的处理?SQL是一种功能强大的语言,你可以用SQL做很多事情。当SQL不够时,MySQL允许您用C编写UDF,这可以非常快地完成。如今,几乎不需要将10亿条记录提取到客户端并进行后期处理——你要不惜一切代价避免这种情况。通常,你会有一个生产者-消费者设计来进行这样的处理,并且可以很好地扩展到多个工作线程,但由于GIL的存在,这在Python中并不容易。当您受到IO限制而不是CPU限制时,线程可以为您在Python中购买更多。请在select查询中进行更改。您正在进行什么样的处理?SQL是一种功能强大的语言,你可以用SQL做很多事情。当SQL不够时,MySQL允许您用C编写UDF,这可以非常快地完成。如今,几乎不需要将10亿条记录提取到客户端并进行后期处理——你要不惜一切代价避免这种情况。通常,你会有一个生产者-消费者设计来进行这样的处理,并且可以很好地扩展到多个工作线程,但由于GIL的存在,这在Python中并不容易。当您受到IO约束而不是CPU约束时,线程在Python中可以为您带来更多。