gpt4 book ai didi

python - MySQLdb 对于大结果集非常慢

转载 作者:太空狗 更新时间:2023-10-29 21:17:51 26 4
gpt4 key购买 nike

我在 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

phpMyAdmin 表示查询花费了 2 毫秒。我的 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

最佳答案

如果您希望 SQL 查询有一个大的结果集,然后您计划逐个记录地迭代,那么您可能需要考虑使用 MySQLdb SSCursor而不是默认光标。默认游标将结果集存储在客户端,而 SSCursor 将结果集存储在服务器。与默认游标不同,如果您需要做的只是一条一条地遍历记录,则 SSCursor 不会产生较大的初始延迟。

您可以在 how to use the SSCursor here 上找到一些示例代码.

例如,尝试:

import MySQLdb.cursors

self.db = MySQLdb.connect(host="localhost", user="root", passwd="", db="ibeat",
cursorclass = MySQLdb.cursors.SSCursor)

(其余代码可以保持不变。)

关于python - MySQLdb 对于大结果集非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5994363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com