0

Сервер 4core/64GB RAM/30GB SSD

Ubuntu 22, MariaDB: 10.6.7-MariaDB-2ubuntu1

Нагрузка на сервер нулевая.

Таблица с 3млн записей:

CREATE TABLE `t1` (
    `id` INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
    ...
    PRIMARY KEY (`id`) USING BTREE, 
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;

Делаю запрос по первичному ключу используя IN:

SELECT id FROM `t1` WHERE id IN (123,2352,2423);

Запрос выполняется очень долго - 3 секунды.

В таком варианте время выполнения аналогично:

SELECT id FROM `t1` WHERE id=123 OR id=2352 OR id=2423;

Если же пробовать выполнить запрос

SELECT id FROM `t1` WHERE id>2352 AND id<2362

то результат получаю мгновенно.

Почему с параметром "IN" запрос по первичному ключу такой долгий? В mySQL с аналогичными параметрами сервера и настроек таких проблем не возникало.

  • Таблица секционирована? Статистика обновлена? Можешь план запроса приложить? – Vitaliy Zlobin Jul 02 '22 at 04:05
  • спасибо, решил проблему. Ответ ниже – user305545 Jul 02 '22 at 04:15
  • про секционирование и обновление статистики можно подробнее ? это как и где делается? – user305545 Jul 02 '22 at 04:16
  • @Ruoort лучше потом почитать про это, в комментарий не уложусь) для оптимизации работы применяются – Vitaliy Zlobin Jul 02 '22 at 11:48

1 Answers1

0

Проблему устранил оптимизацией таблицы ))) : OPTIMIZE TABLE t1;

До этого переносил БД с СУБД mySQL с помощью mysqldump, и выполнением полученного .sql (куча запросов INSERT) на новой машине с СУБД mariaDB.

Возможно при импорте конечный оператор включения индексов не был выполнен и импорт был не полностью завершен. (недоглядел)