は私が分析するように設定された時間系列データを持っていますが、難易度は行間計算の前にレコードをソートするオプションは何ですか?
- データセットが非常に大きいということです。
- 時系列イベントは、所属する異なるオブジェクトによってコミットされます。
- そのMySQLでは、
などに参加するインデックス列のような全くIDが存在しません私はそれぞれの間の遅延を知るしようとしています
----------------
dt obj comp
----------------
t1, object_a, component_1
t2, object_b, component_1
t3, object_c, component_3
t4, object_a, component_1
t5, object_c, component_2
t6, object_b, component_3
----------------
は、各オブジェクトの各コンポーネントから をコミットします。 すなわち obj_a.comp_1.delay1 = obj_a.compoent_1.t4 - obj_a.component_1.t1
など
私は
select timediff(t1.dt, t.dt) as delay
from table as t
join table as t1
on t1.dt = (
select min(t2.dt)
from table as t2
where t2.obj = t.obj
and t2.comp = t.comp
and t2.dt > t.dt
)
に参加しようとしたが、それは永遠に取っているので、私は結果をソートして変数を使って行間計算を行う方法があれば、はるかに速くなるだろうと考えています。 ですが、サブクエリとビューのすべての方法で失敗しました。ソートは計算後に常に行われます。私がorder by
で読んだところから、それは不可能と思われます。だから私はこれを合理的に速く達成するためにどのような選択肢が必要ですか?
問題を修正していただきありがとうございます。後者のバージョンは結合バージョンよりもわずかに速く実行されます。それでもまだ多くの時間ペナルティがあります。最初のものは22分、後者は16分かかります。 – Ben
(上記の時間は、objとcompキーに基づいてレコードをソートすることも含みます)。しかし、レコードを最初にソートして、テンポラリテーブルに入れて順序を保持し、行内減算を行うとわずか5分しかかかりません。結果は同じです。 (ソートの際のいくつかの脅威の結果を除いて)。私は一時的なテーブルのアイデアを多大な時間のペナルティなしに避けることができるかどうかまだ不思議です。 – Ben
@Ben。 。 。インデックスを作成しましたか? –