我正在对熊猫和sqlalchemy使用MySQL。然而,它的速度非常慢。像这样一个简单的查询需要11分钟以上的时间才能在一个包含11百万行的表上完成。哪些操作可以提高此性能?提到的表没有主键,并且只按一列编制了索引。
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)发布于 2021-11-09 06:10:26
您可以试用我们的tool connectorx (pip install -U connectorx)。它是在Rust中实现的,旨在提高pandas.read_sql的性能。接口与pandas基本一致。例如,在您的示例中,代码将如下所示:
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一样均匀分布的数值列,您还可以通过利用多个核心来进一步加速该过程,如下所示:
df = cx.read_sql(conn_url, query, partition_on="ID", partition_num=4)这将通过过滤ID列将整个查询拆分为四个小查询,connectorx将并行运行它们。您可以查看here了解更多用法和示例。
以下是使用4个内核从MySQL加载60M行x 16列到pandas DataFrame的基准测试结果:


https://stackoverflow.com/questions/66398851
复制相似问题