この質問は、私の前の質問に非常に関連しています。MySQL、Xの最後の数時間以内にすべての結果を返しますが、追加の重要な制約があります。
これで、2つのテーブルがあります。1つは測定用で、もう1つは測定の一部の分類結果用です。
その結果、測定値は常に到着し、新しい測定値の分類後に常に追加されます。
結果は、必ずしも測定の到着と保存の順序で同じ順序で保存されるとは限りません。
最後の結果を提示することだけに興味があります。最後に、最後に利用可能な結果の最大時間(時間は測定構造の一部です)をYとX秒の範囲と呼び、YとYXの範囲で利用可能な結果と一緒に測定値を提示することを意味します。
2つのテーブルの構造は次のとおりです。
イベントテーブル:
CREATE TABLE `event_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Feature` char(256) NOT NULL,
`UnixTimeStamp` int(10) unsigned NOT NULL,
`Value` double NOT NULL,
KEY `ix_filter` (`Feature`),
KEY `ix_time` (`UnixTimeStamp`),
KEY `id_index` (`id`)
) ENGINE=MyISAM
分類された結果の表:
CREATE TABLE `event_results` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`level` enum('NORMAL','SUSPICIOUS') DEFAULT NULL,
`score` double DEFAULT NULL,
`eventId` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `eventId_index` (`eventId`)
) ENGINE=MyISAM
現在結果がある測定値を表示したいので、最初に最後の測定値のタイムスタンプを照会できません。また、測定値が常に到着するため、結果がまだ利用できない場合があります。
したがって
event_results.eventId=event_data.id
、最大時間を使用して2つのテーブルを結合することを考えevent_data.UnixTimeStamp as maxTime
ました。maxTimeを取得した後、同じ操作を再度実行し(2つのテーブルを結合)、where句に条件を追加する必要があります。
WHERE event_data.UnixTimeStamp >= maxTime + INTERVAL -X SECOND
私が求めていることを達成するためだけに2つの結合を実行するのは効率的ではないようです。もっと効果がありますか