MariaDB使用LIMIT更新性能

vfh0ocws  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(91)

我们有一个应用程序,有多个线程,从一个表中抓取行进行处理。
想象一下这样的查询:

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
我不知道还有什么可以检查。

ctrmrzij

ctrmrzij1#

一个复合索引的两列从那里的WHERE子句解决了它。
基于此:为什么一个简单的MySQL更新查询偶尔会花费几分钟时间?

相关问题