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 |
+------------------------------+-----------+