首页 > 解决方案 > 获取结果时 pyodbc 到 SQL Server 的速度太慢

问题描述

我正在使用带有 Python 3 的 jupiter notebook 并连接到 SQL Server 数据库。我正在使用 pyodbc 4.0.22 版连接到数据库。

我的目标是将 SQL 结果存储在 pandas 数据框中,但查询速度很慢。

这是代码:

import pyodbc 
cnxn = pyodbc.connect("DSN=ISTPRD02;"
                      "Trusted_Connection=yes;")
ontem = '20180521'

query = "SELECT LOJA, COUNT(DISTINCT RA) FROM VENDAS_CONTRATO(NOLOCK) WHERE DT_RETIRADA_RA = '" + ontem + "' AND SITUACAO IN ('ABERTO', 'FECHADO') GROUP BY LOJA"
start = time.time()
ra_ontem = pd.read_sql_query(query, cnxn)
end = time.time()
print("Tempo: ", end - start)

节奏:26.379971981048584

由于耗时较长,所以我对数据库服务器进行了监控,在服务器上运行查询大约需要 3 秒,如下图所示:

query = "SELECT LOJA, COUNT(DISTINCT RA)  FROM VENDAS_CONTRATO(NOLOCK) WHERE DT_RETIRADA_RA = '" + ontem + "' AND SITUACAO IN ('ABERTO', 'FECHADO') GROUP BY LOJA"
start = time.time()
crsr = cnxn.cursor()
crsr.execute(query)
end = time.time()
print("Tempo: ", end - start)

速度:3.7947773933410645

start = time.time()
crsr.fetchone()
end = time.time()
print("Tempo: ", end - start)

速度:0.2396855354309082

start = time.time()
crsr.fetchall()
end = time.time()
print("Tempo: ", end - start)

节奏:23.67447066307068

因此,当数据已经从数据库服务器检索到并且看起来 pyhton 代码在处理数据时很慢时,我的问题似乎是本地的。

但我只有892行!

ra_ontem.shape

(189, 2)

所以我的问题是我怎样才能让它更快并将结果加载到 Pandas Dataframe 中?

谢谢

标签: pythonsqlperformancepyodbc

解决方案


我有同样的问题,只是因为跟踪已打开。只需打开 ODBC 数据源管理器并转到跟踪选项卡并关闭跟踪。它完全解决了问题。


推荐阅读