DELETE отказывается использовать индекс
Есть форум на MariaDB 10.5.21. Есть таблица
CREATE TABLE `forum_search_matches` (
`post_id` INT UNSIGNED NOT NULL DEFAULT '0',
`word_id` INT UNSIGNED NOT NULL DEFAULT '0',
`subject_match` TINYINT(1) NOT NULL DEFAULT '0',
INDEX `forum_search_matches_post_id_idx` (`post_id`),
INDEX `forum_search_matches_multi_idx` (`word_id`, `post_id`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;
В таблице на данный момент более 25 миллионов записей.
1.При удалении отдельных или группы сообщений выполняется запрос:
DELETE FROM forum_search_matches WHERE post_id IN (1,2,3,4,5)
Такой запрос выполняется мгновенно (0.000 - 0.002 сек).
2.При удаление темы выполняется другой запрос:
DELETE
FROM forum_search_matches
WHERE post_id IN (
SELECT p.id
FROM forum_posts AS p
WHERE p.topic_id IN (76002520)
)
И тут появляется проблема:
EXPLAIN
Такой запрос выполняется очень долго, больше 20 сек.
Как ускорить/исправить запрос DELETE?
Я так понимаю, MariaDB не использует индекс на столбце post_id и перебирает все строки в таблице. Как заставить БД использовать индекс?
P.S. На локальном тестовом форуме с MySQL 8.0.33 и таблицей на 5.7 миллионов записей проблем нет.
Источник: Stack Overflow на русском