У меня возникла проблема с одной из таблиц в базе ~ 10 млн записей.
В общем есть стандартная таблица с данными о товаре, где есть idтовара, цена, торговый объект.
Таблица обновляется нонстоп, INSERT и UPDATE.
Проблема получить минимальное и максимальное значение (т.е. Цены) определенного товара мгновенно.
Было бы все хорошо, если просто нужно было получить idtovar = 1986464, но там в среднем сразу от 200 idшников (не будем вдаваться в подробности, т.к. эти idtovar связаны определенным hash в другой таблице, поэтому их много) и по торговым объектам idmag коих тоже много (от 100).
Запрос уже оптимизирован всеми возможными способами - 3 sec максимальная скорость на больших регионах. Но такое время естественно никого не устроит.
CREATE TABLE `goods` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`idtovar` INT(10) UNSIGNED NOT NULL,
`idmag` INT(10) UNSIGNED NOT NULL,
`price` INT(10) UNSIGNED NULL DEFAULT NULL,
`countov` FLOAT UNSIGNED NULL DEFAULT NULL,
`valid` TINYINT(1) NOT NULL DEFAULT '1',
`update` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `ix_goods` (`idtovar`, `idmag`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
Может есть у кого идеи из личного опыта. Что посоветуете?
P.S. может кто-то скажет нету индекса по price, но индекс замедлит INSERT and UPDATE.
Сократил Explain в 3 раза, осталось только основное, затер некоторые названия