MySQLdb的结果集非常慢


问题内容

我在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进行查询需要 848毫秒 (甚至没有获取结果)。

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

问题答案:

PHPMyAdmin限制了所有查询,因此您不会在界面中返回较大的结果集。因此,如果您的查询通常返回1,000,000行,而PHPMyAdmin将其减少到1,000(或默认值),那么当Python抓取甚至查询整个结果集时,您将不得不期望更长的处理时间。

尝试在Python中放置一个与PHPMyAdmin上的限制匹配的限制以比较时间。