Есть большая таблица со статусами операций. В таблице десятки миллионов записей. В таблице множество полей, по которым пользователь может фильтровать данные через интерфейс. Например, даты от/до, признак репликации (0 или 1), идентификатор плагина (строка), зона (строка), режим создания (0 или 1) и т.д.
Фильтр по дате обязателен. По остальным полям нет. По полям, таким как плагин, может быть выбрано несколько значений, т.е. необходим IN. Какие лучше индексы выбрать для подобных фильтров?
Судя по количеству записей скорее всего смешана задача логирования и текущего состояния операции. Возможно имеет смысл разделить на разные сущности в соответствии с бизнес-логикой.
Андрей Скоржинский, у каждой записи есть свое состояние. Была ли она обработана или нет. Могут, например, отфильтровать по записям, которые обработаны, а это просто флаг 0 или 1. По такому полю индекс особо смысла нет строить, но при этом нужно быстро выбирать такие записи.
Причём единичный запрос выполняется за 500мс, но как только запустить запрос в несколько потоков, то скорость выполнения выростает до, бывает, двух минут.