Я получил эту таблицу:MySQL COUNT очень медленно
CREATE TABLE `pertemba_client_raw_data` (
`line_id` int(11) NOT NULL AUTO_INCREMENT,
`feed_id` int(11) NOT NULL COMMENT 'References pertemba_client_feed_log.feed_id',
`data_line` int(11) NOT NULL COMMENT 'Eg. The CSV line number or JSON object index.',
`property_title` varchar(255) NOT NULL COMMENT 'Eg. The CSV header or JSON key.',
`property_value` varchar(255) NOT NULL COMMENT 'Eg. The CSV field value or JSON object value.',
`date_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`line_id`),
UNIQUE KEY `pertemba_client_raw_data_line_id_pk` (`line_id`),
KEY `feed_id` (`feed_id`),
CONSTRAINT `pertemba_client_raw_data_ibfk_1` FOREIGN KEY (`feed_id`) REFERENCES `pertemba_client_feed_log` (`feed_id`)
) ENGINE=InnoDB AUTO_INCREMENT=113121 DEFAULT CHARSET=utf8
который в настоящее время содержит около 110 000 записей, но будет гораздо больше.
У меня есть php-процесс, который работает с этой таблицей, которая работает очень медленно - время выполнения в настоящее время составляет 10+ минут. Когда я повторно запустить show PROCESSLIST;
этот запрос в процессе всегда работает:
SELECT COUNT(pcr.line_id) AS result FROM pertemba_client_raw_data AS pcr
WHERE pcr.feed_id = :feedId
AND pcr.property_title = :title
AND pcr.property_value = :optionLink
Я был бы признателен за любые оптимизации, которые могут быть предложены для взбивания этой проблемы.
Добавить ключ на свойства 'property_title' и' property_value'. Запрос, подобный этому, должен пробежать менее 1 секунды. –
@ Zamrony P. Juhara Спасибо, ребята, это произвело чудеса для моего запроса! Я хотел бы отметить ответ Замрони, но я не видел его, пока не последовал за советом Юргена. – steelpush
(Не ответ, но совет) Поскольку 'PRIMARY KEY' является' UNIQUE KEY', 'DROP' избыточным' UNIQUE (line_id) '. –