我正在对notifications
表运行简单的更新查询:
UPDATE `notifications`
SET is_unread = 0
WHERE MATCH(`grouping_string`) AGAINST("f89dc707afa38520224d887f897478a9")
grouping_string
列有一个FULLTEXT索引,notifications
表有2M +行。
现在,上面的UPDATE需要70秒才能执行。但是,如果我使用相同的WHERE运行SELECT,则结果是立即的。
可能导致此问题的原因以及如何优化UPDATE?
环境: Amazon Aurora引擎上的MySQL 5.6(InnoDB)
更新:在查询中使用EXPLAIN
表示全文索引是可能使用的索引之一,但在执行过程中未使用它。相反,只使用PRIMARY(id)。受影响的行等于表中的行数(2M +)。
更新2 :SHOW VARIABLES LIKE 'query%'
的结果:
+------------------------------+-----------+
| Variable_name | Value |
+------------------------------+-----------+
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 444890112 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
+------------------------------+-----------+