Я дошел до того, что не могу понять, почему следующий запрос MySQL становится медленнее, когда я использую индекс в предложении where. Колонка, которая сводит меня с ума, называется удаленной. Таблица содержит 4,8 млн строк.
Запрос:
SELECT SQL_NO_CACHE SUM(amount)/100 FROM transactions WHERE (type="Payment" or type="Refund") and deleted is NULL
Этот запрос занимает чуть более 11 секунд, когда столбец является индексом, и 3 секунды, когда его нет. индексируется или когда я использую USE INDEX()
, которые говорят оптимизатору не использовать индекс.
MySQL версии 5.6, протестировано в AWS Aurora db.r5.xlarge (4CPU / 32GB)
Структура таблицы:
id int(11) NOT NULL,
type enum('Charge','Payment','Refund','Credit Adjustment','Debit Adjustment','Transfer') NOT NULL,
amount int(11) NOT NULL,
deleted datetime DEFAULT NULL,
deleted_by int(11) DEFAULT NULL
ENGINE=InnoDB DEFAULT CHARSET=utf8;
ADD KEY type (type),
ADD KEY deleted (deleted)
Я быцените любые подсказки здесь!