0

我正在对我的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      |
+------------------------------+-----------+
4

0 回答 0