【发布时间】:2018-10-20 17:27:35
【问题描述】:
我正在使用 Python 连接到 MySQL,如下所示:
db = MySQLdb.connect(host="localhost", user="****", passwd="****", db="****", charset='utf8')
db.query(sql)
result = db.use_result()
event_data = result.fetch_row(maxrows=1, how=1)
if event_data:
event_data=event_data[0]
所以我不是一次获取所有结果,而是逐行获取,它使用的内存更少,工作速度更快。 通常它工作正常,但我遇到了一个奇怪的错误:
3170, "'range optimizer max 的内存容量为 8388608 字节 mem_size' 超出。没有为此查询进行范围优化。
这很奇怪,因为结果大约是 500 000 行,并不是最大的行,而且我正在逐行处理而不将其提取到 RAM 中,而且我以前从未遇到过此错误。
我有一个很大的 'ID in (*ID's LIST)' 表达式,但如果查询太长,我会收到 OperationalError,我处理了几块 ID,从来没有问题。
【问题讨论】:
-
您是否将“获取大小”设置为默认值以外的值?也许它试图一次加载所有行。
-
@TheImpaler 没有,有 maxrows=1
标签: python mysql sql python-3.x