我必须处理一个大的结果集(可能是数十万行,有时更多).
不幸的是,它们需要一次性检索(启动时).
我试图通过使用尽可能少的内存来做到这一点.
通过查看,我发现使用SSCursor可能是我正在寻找的,但我仍然不知道如何正确使用它们.
fetchall()从基本游标或SScursor 做一个相同的(在内存使用方面)?
我可以从sscursor我的行逐个"流动"(或几个),如果是,
那么最好的方法是什么?
我在phpMyAdmin和MySQLdb(python)中执行了以下查询.
SELECT *, (SELECT CONCAT(`id`, '|', `name`, '|', `image_code`)
FROM `model_artist` WHERE `id` = `artist_id`) as artist_data,
FIND_IN_SET("metallica", `searchable_words`) as find_0
FROM `model_song` HAVING find_0
Run Code Online (Sandbox Code Playgroud)
phpMyAdmin说查询耗时2ms.我的python代码说使用MySQLdb查询需要848ms(甚至没有获取结果).
python代码:
self.db = MySQLdb.connect(host="localhost", user="root", passwd="", db="ibeat")
self.cur = self.db.cursor()
millis = lambda: time.time() * 1000
start_time = millis()
self.cur.execute_cmd("""SELECT *, (SELECT CONCAT(`id`, '|', `name`, '|', `image_code`)
FROM `model_artist` WHERE `id` = `artist_id`) as artist_data,
FIND_IN_SET("metallica", `searchable_words`) as find_0
FROM `model_song` HAVING find_0""")
print millis() - start_time
Run Code Online (Sandbox Code Playgroud)