У меня есть таблица архивных значений для каждого channel_id, но я также хочу сохранить текущее значение для каждого channel_id доступным.Сначала я попытался поместить его в отдельную таблицу, но использование объединения таблиц для каждого запроса на выбор было невероятно медленным (я рассмотрел объединение двух таблиц).
Итак, я думаю, что лучшая альтернатива - сохранить ее в таблице архивных данных с дополнительным столбцом, чтобы указать, является ли это текущим значением?
Мой вопрос заключается в том, как добавить текущее значение в эту таблицу, если строка не существует с одинаковым значением channel_id и текущим столбцом, равным 1, и обновить его, если оно существует?
Я не вижу способа сделать уникальный индекс, который ссылается как на channel_id, так и на текущий, так как многие channel_ids будут иметь current = 0. Так что замена не будет работать.И обновление не всегда будет работать, потому что строка еще может не существовать.
Есть ли лучшее решение?В таблице будут миллионы записей, и будут сотни тысяч channel_ids.
EDIT
CREATE TABLE `data` (
`date_time` decimal(26,6) NOT NULL,
`channel_id` mediumint(8) unsigned NOT NULL,
`value` varchar(40) DEFAULT NULL,
`status` tinyint(3) unsigned DEFAULT NULL,
`connected` tinyint(1) unsigned NOT NULL,
`current` tinyint(1) unsigned DEFAULT NULL,
PRIMARY KEY (`channel_id`,`date_time`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `current` (
`date_time` decimal(26,6) NOT NULL,
`channel_id` mediumint(8) unsigned NOT NULL,
`value` varchar(40) DEFAULT NULL,
`status` tinyint(3) unsigned DEFAULT NULL,
`connected` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`channel_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Это таблицы, с которыми я сейчас работаю.Я хотел бы либо найти хороший способ объединить их для запросов (в этом случае текущий столбец в таблице данных не нужен), либо просто использовать таблицу данных и для заданного channel_id найти одну строку для этого channel_id, который имеет текущий= 1, и если он существует, обновите его, указав новое значение date_time, value, status и connected.Если он не существует, добавьте его с теми же значениями.