我正在使用 python 2.7 和 pyodbc 3.0.6 访问与我的计算机在同一网络上运行的 db2 (9.7) 服务器。
以下是一个非常精简的示例,类似于我正在尝试做的事情。
import pyodbc as db
def dbcur(connectname):
con = db.connect(connectname)
cur = con.cursor()
return cur,con
def main():
print 'a'
cur,con = dbcur('DSN=MYODBCCON')
print 'b'
# X.name is a short varchar
qry = """
select
X.name as N
from schema.table as X
"""
print 'c'
cur.execute(qry)
print 'd'
c = 0
for row in cur:
c+=1
if not c%100:
print c, row
return
if __name__ == '__main__': main()
此代码在我的 Windows 8 计算机上运行非常慢(10 秒内 100 行)。但是,在我的同事装有 Windows 7 的计算机上,这是闪电般的速度。他的电脑与我的电脑相似,而且他有相同版本的 pyodbc 和 python,所以我不认为这是一个问题。
当我同时使用 IBM DB2 ODBC DRIVER 和 IBM DATA SERVER DRIVER FOR ODBC 时,问题仍然存在。
关于为什么这么慢的任何建议?
我知道诸如 cur.fetchmany() 之类的东西,但我仍然希望这段代码在不使用它的情况下会快得多。
更新:
事实证明 ODBC 很慢,因为打开了跟踪。我禁用了跟踪,性能又回到了我的预期。(可以在 Windows 7 和 8 中的 ODBC 数据源下找到跟踪。)