我们有一个应用程序,有多个线程,从一个表中抓取行进行处理。
想象一下这样的查询:
UPDATE our_table
SET
content_status = 'IN_PROGRESS', worker = 'worker_4'
WHERE
content_upload_status = 'ADD' and content_status = 'DEFAULT';
现在,这个有时会持续2-3-4分钟,我不知道为什么。有时是超级快。
id: 1
select_type: SIMPLE
table: books_to_reconcile_websites
type: index_merge
possible_keys: content_upload_status,content_status
key: content_upload_status,content_status
key_len: 1,1
ref: NULL
rows: 120510
Extra: Using intersect(content_status,status); Using where; Using buffer
如果我运行SELECT只获取行,我得到0行(当然,现在通常会有更多行),需要2-3秒。
我试着在更新中添加一个ORDER BY,没有影响。我试着删除LIMIT,没有影响。
当我运行这个查询时,processlist中没有其他进程使用这个表。
我们在10.4.13-MariaDB
我不知道还有什么可以检查。
1条答案
按热度按时间ctrmrzij1#
一个复合索引的两列从那里的WHERE子句解决了它。
基于此:为什么一个简单的MySQL更新查询偶尔会花费几分钟时间?