Python MySQL查询速度较慢,因为它访问表中较低的数据
我有一个MySQL数据库,运行在USB>SATA SSD和python连接器接口上的raspi4 2GB上。当我运行查询时Python MySQL查询速度较慢,因为它访问表中较低的数据,python,mysql,sql,database,raspberry-pi,Python,Mysql,Sql,Database,Raspberry Pi,我有一个MySQL数据库,运行在USB>SATA SSD和python连接器接口上的raspi4 2GB上。当我运行查询时 UPDATE sessions SET used = 1, date_created = %s, places = %s, loc_query = %s, resp_loc = %s, resp_json = %s, ip_address = %s, full_q_string = %s WHERE used IS NULL LIMIT 1 它的工作速度很快(约1
UPDATE sessions
SET used = 1, date_created = %s, places = %s, loc_query = %s,
resp_loc = %s, resp_json = %s, ip_address = %s, full_q_string = %s
WHERE used IS NULL
LIMIT 1
它的工作速度很快(约1秒),但当它找到列表中较低的行时,速度会慢很多(2-3秒以上,第9000行为4-5秒)。我原以为这是数据库填充的结果,但当我返回并通过将查询中所有填充的列置零并设置“used”=NULL来释放第1-10行时,前10行的速度非常快,即使填充了其他9000行,但当它开始写入第9001行时,速度又变慢了。我试着直接写,以便排得更高
UPDATE sessions
SET used = 1, date_created = %s, places = %s, loc_query = %s,
resp_loc = %s, resp_json = %s, ip_address = %s, full_q_string = %s
WHERE placeholder_id = 9002`
它工作得很好/很快,但我需要第一个查询中的逻辑/想法才能工作。最后,我尝试重新启动Pi以刷新RAM,认为这是缓存的事情,但有类似的过期时间。任何输入建议都将被告知:)
MySQL-(适用于aarch64((Ubuntu))上Linux的MySQL版本8.0.20-0ubuntu0.20.04.1)
表列:
placeholder_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
session_key CHAR(5),
date_polled DATETIME,
date_created DATETIME(6),
full_q_string VARCHAR(2550),
ip_address VARCHAR(255),
places JSON,
loc_query LONGTEXT,
resp_loc LONGTEXT,
resp_json JSON
问题是MySQL有一个查找
user为NULL的行的命令。这可能需要越来越长的时间
解决方案是在用户
上创建索引:
create index idx_sessions_user on sessions(user);
MySQL应该能够使用索引来查找NULL
行,从而加快您的更新速度(在insert
s和update
s上维护索引需要一点开销)。非常感谢。使用它使我的整个程序速度快得可笑。非常感谢!!!!