パイプラインの特定のコンポーネント内のアイテムの数を取得しようとしています。パイプライン内を移動するたびに、この特定のテーブルにエントリが作成されます。
次のように保存されます。
ID:int-pk、ObjectId:varchar(25)、EventType:int、時刻:DateTime
たとえば。私が見ている時間 = 10:00
したがって、オブジェクト 1 にイベント A が午前 9 時にあり、イベント 2 が午前 10 時にある場合、ObjectId (1) を取得したいと思います。
特徴
- ObjectId は、パイプラインを通過する項目の一意の ID であるため、実際にはそれらの項目はほとんどありません (1 つのエントリまたは各パイプライン コンポーネントで、約 10 あります)。
- 1 日あたり最大 10,000 件の挿入が予想されます
- パフォーマンスは少し必要です (したがって、EXISTS(...) はオプションではない可能性があります)。
- ハードウェアは堅牢で、データセンターの SQL マシンですが、他の多くのチーム/プロセスと共有されています。
私が抱えていた問題/私が試していること:
- 現時点での設計なので、実際のデータはありません。テストするために、概念実証のデータベースをすぐに作成する必要があります
- ここに私が試してみようと思っていたことの少しがあります:
select objectid, time, eventtype
from objects
where -- can't use time < @t because I won't get the later events
group by objectid
having --
また
select objectid as oid, time, eventtype
from objects
where eventtype = 1
and time < @t
and exists (select objectid, eventtype, time
where objectid = oid -- not sure if this is legal
and eventtype = 2
and time > @t)
お気づきかもしれませんが、私はあまり SQL を書いていないので、少し忘れてしまいました。
例
ID objectid eventtype time
1 12345 1 09:00 AM
2 12345 2 10:00 AM
eventtypeid description
1 "enter house"
2 "leave house"
3 "enter work"
つまり、被験者 4 人は午前 9 時に家に入り、午前 11 時に家を出ました。12345 はサブジェクトの「名前/番号」です。
この例では、件名が午前 10 時に家にいたかどうかを確認するクエリを実行しようとしています。被験者が家に入ったが、出たことはなかった可能性は十分にあり、このクエリにはそれらが必要ありません.
質問
- 私は正しい軌道に乗っていますか?
- 2 番目のクエリの期待されるパフォーマンスを見積もるにはどうすればよいでしょうか (それが機能すると仮定して)。
- ポインタ?提案?例?
すべてが高く評価されています。