Редакцией:Проверить наличие различных значений для каждой группы
Предположим, у меня есть следующая таблица в MySQL:
CREATE TABLE `events` (
`pv_name` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL,
`time_stamp` bigint(20) UNSIGNED NOT NULL,
`value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
PRIMARY KEY (`pv_name`, `time_stamp`)
) ENGINE=InnoDB;
я могу найти каждый pv_name
, который имеет более чем один отличается value
в этой таблице, используя следующий запрос:
SELECT events.pv_name
FROM events
GROUP BY events.pv_name
HAVING COUNT(DISTINCT events.value) > 1;
Проблема в том, что этот запрос неэффективен. Он подсчитывает все отдельные значения вместо того, чтобы останавливаться после нахождения более одного.
Одно предложение было следующее:
SELECT events.pv_name
FROM events
GROUP BY events.pv_name
HAVING MIN(events.value) < MAX(events.value);
Это эффективно, если индекс включает в себя value
. Тем не менее, value
является текстовым столбцом, поэтому он не может.
Есть ли другой подход, который сделает этот поиск более эффективным? Возможно, существует некоторая форма коррелированного подзапроса? Я хотел бы остаться с MySQL, но если в другом сервере базы данных есть функция, которая поможет мне, я могу подумать о переходе на нее.
, как часто возникают вставки? Каковы требования к точности своевременности? – Drew
У меня нет фиксированного номера для скорости вставки. Это может быть так же быстро, как позволяет база данных. Я не уверен, что вы подразумеваете под точностью своевременности? – Patrick
Может ли быть отставание в том, что статистические данные точны. Этот тип информации исключает или делает возможными различные стратегии. – Drew