DELETE отказывается использовать индекс

Рейтинг: 0Ответов: 0Опубликовано: 12.08.2023

Есть форум на 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 миллионов записей проблем нет. введите сюда описание изображения

Ответы

Ответов пока нет.