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すると、フルテキスト インデックスが使用可能なものの 1 つであることが示されますが、実行中には使用されません。代わりに、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