Python MySQL查询速度较慢,因为它访问表中较低的数据

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

我有一个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秒),但当它找到列表中较低的行时,速度会慢很多(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上维护索引需要一点开销)。

非常感谢。使用它使我的整个程序速度快得可笑。非常感谢!!!!