首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自MySQL的read_sql()非常慢

来自MySQL的read_sql()非常慢
EN

Stack Overflow用户
提问于 2021-02-27 20:34:08
回答 1查看 264关注 0票数 3

我正在对熊猫和sqlalchemy使用MySQL。然而,它的速度非常慢。像这样一个简单的查询需要11分钟以上的时间才能在一个包含11百万行的表上完成。哪些操作可以提高此性能?提到的表没有主键,并且只按一列编制了索引。

代码语言:javascript
复制
from sqlalchemy import create_engine
import pandas as pd
sql_engine_access = 'mysql+pymysql://root:[password]@localhost')
sql_engine = create_engine(sql_engine_access, echo=False)
script = 'select * from my_database.my_table'
df = pd.read_sql(script, con=self.sql_engine)
EN

回答 1

Stack Overflow用户

发布于 2021-11-09 06:10:26

您可以试用我们的tool connectorx (pip install -U connectorx)。它是在Rust中实现的,旨在提高pandas.read_sql的性能。接口与pandas基本一致。例如,在您的示例中,代码将如下所示:

代码语言:javascript
复制
import connectorx as cx
conn_url = "mysql://root:[password]@localhost:port/my_database"
query = "select * from my_table"
df = cx.read_sql(conn_url, query)

如果您的查询结果中有一个像ID一样均匀分布的数值列,您还可以通过利用多个核心来进一步加速该过程,如下所示:

代码语言:javascript
复制
df = cx.read_sql(conn_url, query, partition_on="ID", partition_num=4)

这将通过过滤ID列将整个查询拆分为四个小查询,connectorx将并行运行它们。您可以查看here了解更多用法和示例。

以下是使用4个内核从MySQL加载60M行x 16列到pandas DataFrame的基准测试结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66398851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档