查询超过 1000 万行的 SQL 表

问题描述 投票:0回答:2

我在 Dremio 中有一张超过 1000 万行的表。我已经从 Python PYODBC 连接到它。我想运行如下所示的简单查询:

SELECT REPORTDATE, TRANSDATE 
FROM TABLE 
WHERE TRANSDATE = '2020-01-05'

问题是通过 Python 运行这个查询需要很长时间。 解决方案是什么?

python sql performance pyodbc dremio
2个回答
0
投票

我建议使用 sqlalchemy 或 pandas 进行调用。

就我个人而言,我使用 pandas(下面的示例使用 cx_Oracle,因为我们使用 Oracle 服务器):

import pandas as pd

qry = '''
SELECT REPORTDATE, TRANSDATE 
FROM TABLE 
WHERE TRANSDATE = '2020-01-05'
'''

dsn_tns = cx_Oracle.makedsn('host-name','port',service_name='database')
conn = cx_Oracle.connect(user=user_name, password=pwd, dsn=dsn_tns)
c = conn.cursor()
results = pd.read_sql(qry , conn)
c.close()
conn.close()

如果它仍然运行得太慢,你可以使用

chunksize
属性将它拉成块:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql.html


0
投票

使用Oracle的python-oracledb驱动代替pyodbc并增加

arraysize
值,参见https://python-oracledb.readthedocs.io/en/latest/user_guide/tuning.html#tuning-fetch-performance

cur = connection.cursor()

cur.arraysize = 5000

for row in cur.execute("SELECT * FROM very_big_table"):
    print(row)

除非你真的想要一个 Pandas 数据框,否则使用驱动程序本地调用将是最快的。

python-oracledb 的“Thin”模式(默认)可能比“Thick”模式更快。

© www.soinside.com 2019 - 2024. All rights reserved.